home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 April / PCWorld_2008-04_cd.bin / temacd / devc++ / devcpp-4.9.9.2_setup.exe / winsock2.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  47KB  |  1,282 lines

  1. /*
  2.  
  3.   Definitions for winsock 2
  4.  
  5.   Contributed by the WINE project.
  6.  
  7.   Portions Copyright (c) 1980, 1983, 1988, 1993
  8.   The Regents of the University of California.  All rights reserved.
  9.  
  10.   Portions Copyright (c) 1993 by Digital Equipment Corporation.
  11.  */
  12.  
  13. #if !(defined _WINSOCK2_H || defined _WINSOCK_H)
  14. #define _WINSOCK2_H
  15. #define _WINSOCK_H /* to prevent later inclusion of winsock.h */
  16. #if __GNUC__ >=3
  17. #pragma GCC system_header
  18. #endif
  19.  
  20. #define _GNU_H_WINDOWS32_SOCKETS
  21.  
  22. #include <windows.h>
  23.  
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. /*   Names common to Winsock1.1 and Winsock2  */
  28. #if !defined ( _BSDTYPES_DEFINED )
  29. /* also defined in gmon.h and in cygwin's sys/types */
  30. typedef unsigned char    u_char;
  31. typedef unsigned short    u_short;
  32. typedef unsigned int    u_int;
  33. typedef unsigned long    u_long;
  34. #define _BSDTYPES_DEFINED
  35. #endif /* ! def _BSDTYPES_DEFINED  */
  36. typedef u_int    SOCKET;
  37. #ifndef FD_SETSIZE
  38. #define FD_SETSIZE    64
  39. #endif
  40.  
  41. /* shutdown() how types */
  42. #define SD_RECEIVE      0x00
  43. #define SD_SEND         0x01
  44. #define SD_BOTH         0x02
  45.  
  46. #ifndef _SYS_TYPES_FD_SET
  47. /* fd_set may be defined by the newlib <sys/types.h>
  48.  * if __USE_W32_SOCKETS not defined.
  49.  */
  50. #ifdef fd_set
  51. #undef fd_set
  52. #endif
  53. typedef struct fd_set {
  54.     u_int   fd_count;
  55.     SOCKET  fd_array[FD_SETSIZE];
  56. } fd_set;
  57. int PASCAL __WSAFDIsSet(SOCKET,fd_set*);
  58. #ifndef FD_CLR
  59. #define FD_CLR(fd,set) do { u_int __i;\
  60. for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\
  61.     if (((fd_set *)(set))->fd_array[__i] == (fd)) {\
  62.     while (__i < ((fd_set *)(set))->fd_count-1) {\
  63.         ((fd_set*)(set))->fd_array[__i] = ((fd_set*)(set))->fd_array[__i+1];\
  64.         __i++;\
  65.     }\
  66.     ((fd_set*)(set))->fd_count--;\
  67.     break;\
  68.     }\
  69. }\
  70. } while (0)
  71. #endif
  72. #ifndef FD_SET
  73. /* this differs from the define in winsock.h and in cygwin sys/types.h */
  74. #define FD_SET(fd, set) do { u_int __i;\
  75. for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\
  76.     if (((fd_set *)(set))->fd_array[__i] == (fd)) {\
  77.         break;\
  78.     }\
  79. }\
  80. if (__i == ((fd_set *)(set))->fd_count) {\
  81.     if (((fd_set *)(set))->fd_count < FD_SETSIZE) {\
  82.         ((fd_set *)(set))->fd_array[__i] = (fd);\
  83.         ((fd_set *)(set))->fd_count++;\
  84.     }\
  85. }\
  86. } while(0)
  87. #endif
  88. #ifndef FD_ZERO
  89. #define FD_ZERO(set) (((fd_set *)(set))->fd_count=0)
  90. #endif
  91. #ifndef FD_ISSET
  92. #define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set *)(set))
  93. #endif
  94. #elif !defined (USE_SYS_TYPES_FD_SET)
  95. #warning "fd_set and associated macros have been defined in sys/types.  \
  96.     This may cause runtime problems with W32 sockets"
  97. #endif /* ndef _SYS_TYPES_FD_SET */
  98. #if !(defined (__INSIDE_CYGWIN__) || (__INSIDE_MSYS__))
  99. #ifndef _TIMEVAL_DEFINED /* also in sys/time.h */
  100. #define _TIMEVAL_DEFINED
  101. struct timeval {
  102.     long    tv_sec;
  103.     long    tv_usec;
  104. };
  105. #define timerisset(tvp)     ((tvp)->tv_sec || (tvp)->tv_usec)
  106. #define timercmp(tvp, uvp, cmp) \
  107.     (((tvp)->tv_sec != (uvp)->tv_sec) ? \
  108.     ((tvp)->tv_sec cmp (uvp)->tv_sec) : \
  109.     ((tvp)->tv_usec cmp (uvp)->tv_usec))
  110. #define timerclear(tvp)     (tvp)->tv_sec = (tvp)->tv_usec = 0
  111. #endif /* _TIMEVAL_DEFINED */
  112. struct  hostent {
  113.     char    *h_name;
  114.     char    **h_aliases;
  115.     short    h_addrtype;
  116.     short    h_length;
  117.     char    **h_addr_list;
  118. #define h_addr h_addr_list[0]
  119. };
  120. struct linger {
  121.     u_short l_onoff;
  122.     u_short l_linger;
  123. };
  124. #endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
  125. #define IOCPARM_MASK    0x7f
  126. #define IOC_VOID    0x20000000
  127. #define IOC_OUT    0x40000000
  128. #define IOC_IN    0x80000000
  129. #define IOC_INOUT    (IOC_IN|IOC_OUT)
  130.  
  131. #if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
  132. #define _IO(x,y)    (IOC_VOID|((x)<<8)|(y))
  133. #define _IOR(x,y,t)    (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
  134. #define _IOW(x,y,t)    (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
  135. #define FIONBIO    _IOW('f', 126, u_long)
  136. #endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
  137.  
  138. #define FIONREAD    _IOR('f', 127, u_long)
  139. #define FIOASYNC    _IOW('f', 125, u_long)
  140. #define SIOCSHIWAT    _IOW('s',  0, u_long)
  141. #define SIOCGHIWAT    _IOR('s',  1, u_long)
  142. #define SIOCSLOWAT    _IOW('s',  2, u_long)
  143. #define SIOCGLOWAT    _IOR('s',  3, u_long)
  144. #define SIOCATMARK    _IOR('s',  7, u_long)
  145.  
  146. #if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
  147. struct netent {
  148.     char    * n_name;
  149.     char    **n_aliases;
  150.     short    n_addrtype;
  151.     u_long n_net;
  152. };
  153. struct  servent {
  154.     char    *s_name;
  155.     char    **s_aliases;
  156.     short    s_port;
  157.     char    *s_proto;
  158. };
  159. struct  protoent {
  160.     char    *p_name;
  161.     char    **p_aliases;
  162.     short    p_proto;
  163. };
  164. #endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
  165.  
  166. #define IPPROTO_IP    0
  167. #define IPPROTO_ICMP 1
  168. #define IPPROTO_IGMP 2
  169. #define IPPROTO_GGP 3
  170. #define IPPROTO_TCP    6
  171. #define IPPROTO_PUP    12
  172. #define IPPROTO_UDP    17
  173. #define IPPROTO_IDP    22
  174. #define IPPROTO_ND    77
  175. #define IPPROTO_RAW    255
  176. #define IPPROTO_MAX    256
  177. /* IPv6 options */
  178. #define IPPROTO_HOPOPTS        0  /* IPv6 Hop-by-Hop options */
  179. #define IPPROTO_IPV6        41 /* IPv6 header */
  180. #define IPPROTO_ROUTING        43 /* IPv6 Routing header */
  181. #define IPPROTO_FRAGMENT    44 /* IPv6 fragmentation header */
  182. #define IPPROTO_ESP        50 /* encapsulating security payload */
  183. #define IPPROTO_AH        51 /* authentication header */
  184. #define IPPROTO_ICMPV6        58 /* ICMPv6 */
  185. #define IPPROTO_NONE        59 /* IPv6 no next header */
  186. #define IPPROTO_DSTOPTS        60 /* IPv6 Destination options */
  187. #define IPPORT_ECHO    7
  188. #define IPPORT_DISCARD    9
  189. #define IPPORT_SYSTAT    11
  190. #define IPPORT_DAYTIME  13
  191. #define IPPORT_NETSTAT  15
  192. #define IPPORT_FTP      21
  193. #define IPPORT_TELNET   23
  194. #define IPPORT_SMTP     25
  195. #define IPPORT_TIMESERVER 37
  196. #define IPPORT_NAMESERVER 42
  197. #define IPPORT_WHOIS    43
  198. #define IPPORT_MTP    57
  199. #define IPPORT_TFTP    69
  200. #define IPPORT_RJE    77
  201. #define IPPORT_FINGER    79
  202. #define IPPORT_TTYLINK    87
  203. #define IPPORT_SUPDUP    95
  204. #define IPPORT_EXECSERVER    512
  205. #define IPPORT_LOGINSERVER    513
  206. #define IPPORT_CMDSERVER    514
  207. #define IPPORT_EFSSERVER    520
  208. #define IPPORT_BIFFUDP    512
  209. #define IPPORT_WHOSERVER    513
  210. #define IPPORT_ROUTESERVER    520
  211. #define IPPORT_RESERVED    1024
  212. #define IMPLINK_IP    155
  213. #define IMPLINK_LOWEXPER    156
  214. #define IMPLINK_HIGHEXPER       158
  215. struct in_addr {
  216.     union {
  217.         struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
  218.         struct { u_short s_w1,s_w2; } S_un_w;
  219.         u_long S_addr;
  220.     } S_un;
  221. #define s_addr  S_un.S_addr
  222. #define s_host  S_un.S_un_b.s_b2
  223. #define s_net   S_un.S_un_b.s_b1
  224. #define s_imp   S_un.S_un_w.s_w2
  225. #define s_impno S_un.S_un_b.s_b4
  226. #define s_lh    S_un.S_un_b.s_b3
  227. };
  228. #define IN_CLASSA(i)    (((long)(i)&0x80000000) == 0)
  229. #define IN_CLASSA_NET    0xff000000
  230. #define IN_CLASSA_NSHIFT    24
  231. #define IN_CLASSA_HOST    0x00ffffff
  232. #define IN_CLASSA_MAX    128
  233. #define IN_CLASSB(i)    (((long)(i)&0xc0000000)==0x80000000)
  234. #define IN_CLASSB_NET       0xffff0000
  235. #define IN_CLASSB_NSHIFT    16
  236. #define IN_CLASSB_HOST      0x0000ffff
  237. #define IN_CLASSB_MAX       65536
  238. #define IN_CLASSC(i)    (((long)(i)&0xe0000000)==0xc0000000)
  239. #define IN_CLASSC_NET       0xffffff00
  240. #define IN_CLASSC_NSHIFT    8
  241. #define IN_CLASSC_HOST      0xff
  242. #define INADDR_ANY          (u_long)0
  243. #define INADDR_LOOPBACK     0x7f000001
  244. #define INADDR_BROADCAST    (u_long)0xffffffff
  245. #define INADDR_NONE    0xffffffff
  246. struct sockaddr_in {
  247.     short    sin_family;
  248.     u_short    sin_port;
  249.     struct    in_addr sin_addr;
  250.     char    sin_zero[8];
  251. };
  252. #define WSADESCRIPTION_LEN    256
  253. #define WSASYS_STATUS_LEN    128
  254. typedef struct WSAData {
  255.     WORD    wVersion;
  256.     WORD    wHighVersion;
  257.     char    szDescription[WSADESCRIPTION_LEN+1];
  258.     char    szSystemStatus[WSASYS_STATUS_LEN+1];
  259.     unsigned short    iMaxSockets;
  260.     unsigned short    iMaxUdpDg;
  261.     char *     lpVendorInfo;
  262. } WSADATA;
  263. typedef WSADATA *LPWSADATA;
  264.  
  265. #if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
  266. #define IP_OPTIONS    1
  267. #define SO_DEBUG    1
  268. #define SO_ACCEPTCONN    2
  269. #define SO_REUSEADDR    4
  270. #define SO_KEEPALIVE    8
  271. #define SO_DONTROUTE    16
  272. #define SO_BROADCAST    32
  273. #define SO_USELOOPBACK    64
  274. #define SO_LINGER    128
  275. #define SO_OOBINLINE    256
  276. #define SO_DONTLINGER    (u_int)(~SO_LINGER)
  277. #define SO_SNDBUF    0x1001
  278. #define SO_RCVBUF    0x1002
  279. #define SO_SNDLOWAT    0x1003
  280. #define SO_RCVLOWAT    0x1004
  281. #define SO_SNDTIMEO    0x1005
  282. #define SO_RCVTIMEO    0x1006
  283. #define SO_ERROR    0x1007
  284. #define SO_TYPE    0x1008
  285. #endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
  286.  
  287. #define INVALID_SOCKET (SOCKET)(~0)
  288. #define SOCKET_ERROR    (-1)
  289. #define SOCK_STREAM    1
  290. #define SOCK_DGRAM    2
  291. #define SOCK_RAW    3
  292. #define SOCK_RDM    4
  293. #define SOCK_SEQPACKET    5
  294. #define TCP_NODELAY    0x0001
  295. #define AF_UNSPEC    0
  296. #define AF_UNIX    1
  297. #define AF_INET    2
  298. #define AF_IMPLINK    3
  299. #define AF_PUP    4
  300. #define AF_CHAOS    5
  301. #define AF_IPX    6
  302. #define AF_NS    6
  303. #define AF_ISO    7
  304. #define AF_OSI    AF_ISO
  305. #define AF_ECMA    8
  306. #define AF_DATAKIT    9
  307. #define AF_CCITT    10
  308. #define AF_SNA    11
  309. #define AF_DECnet    12
  310. #define AF_DLI    13
  311. #define AF_LAT    14
  312. #define AF_HYLINK    15
  313. #define AF_APPLETALK    16
  314. #define AF_NETBIOS    17
  315. #define AF_VOICEVIEW    18
  316. #define    AF_FIREFOX    19
  317. #define    AF_UNKNOWN1    20
  318. #define    AF_BAN    21
  319. #define AF_ATM    22
  320. #define AF_INET6    23
  321. #define AF_CLUSTER  24
  322. #define AF_12844    25
  323. #define AF_IRDA     26
  324. #define AF_NETDES   28
  325. #if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
  326. #define AF_MAX    29
  327. struct sockaddr {
  328.     u_short sa_family;
  329.     char    sa_data[14];
  330. };
  331. #endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
  332.  
  333. /* Portable IPv6/IPv4 version of sockaddr.
  334.    Uses padding to force 8 byte alignment
  335.    and maximum size of 128 bytes */
  336. struct sockaddr_storage {
  337.     short ss_family;
  338.     char __ss_pad1[6];    /* pad to 8 */
  339.     __int64 __ss_align; /* force alignment */
  340.     char __ss_pad2[112];  /* pad to 128 */
  341. };
  342.  
  343. struct sockproto {
  344.     u_short sp_family;
  345.     u_short sp_protocol;
  346. };
  347. #define PF_UNSPEC    AF_UNSPEC
  348. #define PF_UNIX    AF_UNIX
  349. #define PF_INET    AF_INET
  350. #define PF_IMPLINK    AF_IMPLINK
  351. #define PF_PUP    AF_PUP
  352. #define PF_CHAOS    AF_CHAOS
  353. #define PF_NS    AF_NS
  354. #define PF_IPX    AF_IPX
  355. #define PF_ISO    AF_ISO
  356. #define PF_OSI    AF_OSI
  357. #define PF_ECMA    AF_ECMA
  358. #define PF_DATAKIT    AF_DATAKIT
  359. #define PF_CCITT    AF_CCITT
  360. #define PF_SNA    AF_SNA
  361. #define PF_DECnet    AF_DECnet
  362. #define PF_DLI    AF_DLI
  363. #define PF_LAT    AF_LAT
  364. #define PF_HYLINK    AF_HYLINK
  365. #define PF_APPLETALK    AF_APPLETALK
  366. #define PF_VOICEVIEW    AF_VOICEVIEW
  367. #define PF_FIREFOX    AF_FIREFOX
  368. #define PF_UNKNOWN1    AF_UNKNOWN1
  369. #define PF_BAN    AF_BAN
  370. #define PF_ATM    AF_ATM
  371. #define PF_INET6    AF_INET6
  372. #define PF_MAX    AF_MAX
  373. #define SOL_SOCKET    0xffff
  374. #if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
  375. #define SOMAXCONN    0x7fffffff /* (5) in WinSock1.1 */
  376. #define MSG_OOB    1
  377. #define MSG_PEEK    2
  378. #define MSG_DONTROUTE    4
  379. #endif  /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
  380. #define MSG_MAXIOVLEN    16
  381. #define MSG_PARTIAL    0x8000
  382. #define MAXGETHOSTSTRUCT    1024
  383.  
  384. #define FD_READ_BIT      0
  385. #define FD_READ          (1 << FD_READ_BIT)
  386. #define FD_WRITE_BIT     1
  387. #define FD_WRITE         (1 << FD_WRITE_BIT)
  388. #define FD_OOB_BIT       2
  389. #define FD_OOB           (1 << FD_OOB_BIT)
  390. #define FD_ACCEPT_BIT    3
  391. #define FD_ACCEPT        (1 << FD_ACCEPT_BIT)
  392. #define FD_CONNECT_BIT   4
  393. #define FD_CONNECT       (1 << FD_CONNECT_BIT)
  394. #define FD_CLOSE_BIT     5
  395. #define FD_CLOSE         (1 << FD_CLOSE_BIT)
  396. /* winsock1.1 defines stop at FD_CLOSE (32) */
  397. #define FD_QOS_BIT       6
  398. #define FD_QOS           (1 << FD_QOS_BIT)
  399. #define FD_GROUP_QOS_BIT 7
  400. #define FD_GROUP_QOS     (1 << FD_GROUP_QOS_BIT)
  401. #define FD_ROUTING_INTERFACE_CHANGE_BIT 8
  402. #define FD_ROUTING_INTERFACE_CHANGE     (1 << FD_ROUTING_INTERFACE_CHANGE_BIT)
  403. #define FD_ADDRESS_LIST_CHANGE_BIT 9
  404. #define FD_ADDRESS_LIST_CHANGE     (1 << FD_ADDRESS_LIST_CHANGE_BIT)
  405. #define FD_MAX_EVENTS    10
  406. #define FD_ALL_EVENTS    ((1 << FD_MAX_EVENTS) - 1)
  407.  
  408. #ifndef WSABASEERR
  409. #define WSABASEERR    10000
  410. #define WSAEINTR    (WSABASEERR+4)
  411. #define WSAEBADF    (WSABASEERR+9)
  412. #define WSAEACCES    (WSABASEERR+13)
  413. #define WSAEFAULT    (WSABASEERR+14)
  414. #define WSAEINVAL    (WSABASEERR+22)
  415. #define WSAEMFILE    (WSABASEERR+24)
  416. #define WSAEWOULDBLOCK    (WSABASEERR+35)
  417. #define WSAEINPROGRESS    (WSABASEERR+36) /* deprecated on WinSock2 */
  418. #define WSAEALREADY    (WSABASEERR+37)
  419. #define WSAENOTSOCK    (WSABASEERR+38)
  420. #define WSAEDESTADDRREQ    (WSABASEERR+39)
  421. #define WSAEMSGSIZE    (WSABASEERR+40)
  422. #define WSAEPROTOTYPE    (WSABASEERR+41)
  423. #define WSAENOPROTOOPT    (WSABASEERR+42)
  424. #define WSAEPROTONOSUPPORT    (WSABASEERR+43)
  425. #define WSAESOCKTNOSUPPORT    (WSABASEERR+44)
  426. #define WSAEOPNOTSUPP    (WSABASEERR+45)
  427. #define WSAEPFNOSUPPORT    (WSABASEERR+46)
  428. #define WSAEAFNOSUPPORT    (WSABASEERR+47)
  429. #define WSAEADDRINUSE    (WSABASEERR+48)
  430. #define WSAEADDRNOTAVAIL    (WSABASEERR+49)
  431. #define WSAENETDOWN    (WSABASEERR+50)
  432. #define WSAENETUNREACH    (WSABASEERR+51)
  433. #define WSAENETRESET    (WSABASEERR+52)
  434. #define WSAECONNABORTED    (WSABASEERR+53)
  435. #define WSAECONNRESET    (WSABASEERR+54)
  436. #define WSAENOBUFS    (WSABASEERR+55)
  437. #define WSAEISCONN    (WSABASEERR+56)
  438. #define WSAENOTCONN    (WSABASEERR+57)
  439. #define WSAESHUTDOWN    (WSABASEERR+58)
  440. #define WSAETOOMANYREFS    (WSABASEERR+59)
  441. #define WSAETIMEDOUT    (WSABASEERR+60)
  442. #define WSAECONNREFUSED    (WSABASEERR+61)
  443. #define WSAELOOP    (WSABASEERR+62)
  444. #define WSAENAMETOOLONG    (WSABASEERR+63)
  445. #define WSAEHOSTDOWN    (WSABASEERR+64)
  446. #define WSAEHOSTUNREACH    (WSABASEERR+65)
  447. #define WSAENOTEMPTY    (WSABASEERR+66)
  448. #define WSAEPROCLIM    (WSABASEERR+67)
  449. #define WSAEUSERS    (WSABASEERR+68)
  450. #define WSAEDQUOT    (WSABASEERR+69)
  451. #define WSAESTALE    (WSABASEERR+70)
  452. #define WSAEREMOTE    (WSABASEERR+71)
  453. #define WSAEDISCON    (WSABASEERR+101)
  454. #define WSASYSNOTREADY    (WSABASEERR+91)
  455. #define WSAVERNOTSUPPORTED    (WSABASEERR+92)
  456. #define WSANOTINITIALISED    (WSABASEERR+93)
  457. #define WSAHOST_NOT_FOUND    (WSABASEERR+1001)
  458. #define WSATRY_AGAIN    (WSABASEERR+1002)
  459. #define WSANO_RECOVERY    (WSABASEERR+1003)
  460. #define WSANO_DATA    (WSABASEERR+1004)
  461.  
  462. /* WinSock2 specific error codes */
  463. #define WSAENOMORE    (WSABASEERR+102)
  464. #define WSAECANCELLED    (WSABASEERR+103)
  465. #define WSAEINVALIDPROCTABLE    (WSABASEERR+104)
  466. #define WSAEINVALIDPROVIDER    (WSABASEERR+105)
  467. #define WSAEPROVIDERFAILEDINIT    (WSABASEERR+106)
  468. #define WSASYSCALLFAILURE    (WSABASEERR+107)
  469. #define WSASERVICE_NOT_FOUND    (WSABASEERR+108)
  470. #define WSATYPE_NOT_FOUND    (WSABASEERR+109)
  471. #define WSA_E_NO_MORE    (WSABASEERR+110)
  472. #define WSA_E_CANCELLED    (WSABASEERR+111)
  473. #define WSAEREFUSED    (WSABASEERR+112)
  474.  
  475. /* WS QualityofService errors */
  476. #define WSA_QOS_RECEIVERS    (WSABASEERR + 1005)
  477. #define WSA_QOS_SENDERS    (WSABASEERR + 1006)
  478. #define WSA_QOS_NO_SENDERS    (WSABASEERR + 1007)
  479. #define WSA_QOS_NO_RECEIVERS    (WSABASEERR + 1008)
  480. #define WSA_QOS_REQUEST_CONFIRMED    (WSABASEERR + 1009)
  481. #define WSA_QOS_ADMISSION_FAILURE    (WSABASEERR + 1010)
  482. #define WSA_QOS_POLICY_FAILURE    (WSABASEERR + 1011)
  483. #define WSA_QOS_BAD_STYLE    (WSABASEERR + 1012)
  484. #define WSA_QOS_BAD_OBJECT    (WSABASEERR + 1013)
  485. #define WSA_QOS_TRAFFIC_CTRL_ERROR    (WSABASEERR + 1014)
  486. #define WSA_QOS_GENERIC_ERROR    (WSABASEERR + 1015)
  487. #define WSA_QOS_ESERVICETYPE    (WSABASEERR + 1016)
  488. #define WSA_QOS_EFLOWSPEC    (WSABASEERR + 1017)
  489. #define WSA_QOS_EPROVSPECBUF    (WSABASEERR + 1018)
  490. #define WSA_QOS_EFILTERSTYLE    (WSABASEERR + 1019)
  491. #define WSA_QOS_EFILTERTYPE    (WSABASEERR + 1020)
  492. #define WSA_QOS_EFILTERCOUNT    (WSABASEERR + 1021)
  493. #define WSA_QOS_EOBJLENGTH    (WSABASEERR + 1022)
  494. #define WSA_QOS_EFLOWCOUNT    (WSABASEERR + 1023)
  495. #define WSA_QOS_EUNKOWNPSOBJ    (WSABASEERR + 1024)
  496. #define WSA_QOS_EPOLICYOBJ    (WSABASEERR + 1025)
  497. #define WSA_QOS_EFLOWDESC    (WSABASEERR + 1026)
  498. #define WSA_QOS_EPSFLOWSPEC    (WSABASEERR + 1027)
  499. #define WSA_QOS_EPSFILTERSPEC    (WSABASEERR + 1028)
  500. #define WSA_QOS_ESDMODEOBJ    (WSABASEERR + 1029)
  501. #define WSA_QOS_ESHAPERATEOBJ    (WSABASEERR + 1030)
  502. #define WSA_QOS_RESERVED_PETYPE    (WSABASEERR + 1031)
  503.  
  504. #endif /* !WSABASEERR */
  505.  
  506. #define WSANO_ADDRESS    WSANO_DATA
  507. #if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
  508. #define h_errno WSAGetLastError()
  509. #define HOST_NOT_FOUND    WSAHOST_NOT_FOUND
  510. #define TRY_AGAIN    WSATRY_AGAIN
  511. #define NO_RECOVERY    WSANO_RECOVERY
  512. #define NO_DATA    WSANO_DATA
  513. #define NO_ADDRESS    WSANO_ADDRESS
  514. #endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
  515. SOCKET PASCAL accept(SOCKET,struct sockaddr*,int*);
  516. int PASCAL bind(SOCKET,const struct sockaddr*,int);
  517. int PASCAL closesocket(SOCKET);
  518. int PASCAL connect(SOCKET,const struct sockaddr*,int);
  519. int PASCAL ioctlsocket(SOCKET,long,u_long *);
  520. int PASCAL getpeername(SOCKET,struct sockaddr*,int*);
  521. int PASCAL getsockname(SOCKET,struct sockaddr*,int*);
  522. int PASCAL getsockopt(SOCKET,int,int,char*,int*);
  523. unsigned long PASCAL inet_addr(const char*);
  524. DECLARE_STDCALL_P(char *) inet_ntoa(struct in_addr);
  525. int PASCAL listen(SOCKET,int);
  526. int PASCAL recv(SOCKET,char*,int,int);
  527. int PASCAL recvfrom(SOCKET,char*,int,int,struct sockaddr*,int*);
  528. int PASCAL send(SOCKET,const char*,int,int);
  529. int PASCAL sendto(SOCKET,const char*,int,int,const struct sockaddr*,int);
  530. int PASCAL setsockopt(SOCKET,int,int,const char*,int);
  531. int PASCAL shutdown(SOCKET,int);
  532. SOCKET PASCAL socket(int,int,int);
  533. DECLARE_STDCALL_P(struct hostent *) gethostbyaddr(const char*,int,int);
  534. DECLARE_STDCALL_P(struct hostent *) gethostbyname(const char*);
  535. DECLARE_STDCALL_P(struct servent *) getservbyport(int,const char*);
  536. DECLARE_STDCALL_P(struct servent *) getservbyname(const char*,const char*);
  537. DECLARE_STDCALL_P(struct protoent *) getprotobynumber(int);
  538. DECLARE_STDCALL_P(struct protoent *) getprotobyname(const char*);
  539. typedef SOCKET (PASCAL * LPFN_ACCEPT)(SOCKET, struct sockaddr*,int *);
  540. typedef int (PASCAL * LPFN_BIND)(SOCKET, const struct sockaddr*,int);
  541. typedef int (PASCAL * LPFN_CLOSESOCKET)(SOCKET);
  542. typedef int (PASCAL * LPFN_CONNECT)(SOCKET, const struct sockaddr*,int);
  543. typedef int (PASCAL * LPFN_IOCTLSOCKET)(SOCKET, long, u_long*);
  544. typedef int    (PASCAL * LPFN_GETPEERNAME)(SOCKET, struct sockaddr*, int*);
  545. typedef int(PASCAL * LPFN_GETSOCKNAME)(SOCKET, struct sockaddr*, int*);
  546. typedef int(PASCAL * LPFN_GETSOCKOPT)(SOCKET, int, int, char*, int*);
  547. typedef u_long(PASCAL * LPFN_HTONL)(u_long);
  548. typedef u_short(PASCAL * LPFN_HTONS)(u_short);
  549. typedef unsigned long(PASCAL * LPFN_INET_ADDR)(const char*);
  550. typedef char*(PASCAL * LPFN_INET_NTOA)(struct in_addr);
  551. typedef int(PASCAL * LPFN_LISTEN)(SOCKET, int);
  552. typedef u_long(PASCAL * LPFN_NTOHL)(u_long);
  553. typedef u_short(PASCAL * LPFN_NTOHS)(u_short);
  554. typedef int(PASCAL * LPFN_RECV)(SOCKET, char*, int, int);
  555. typedef int(PASCAL * LPFN_RECVFROM)(SOCKET, char*, int, int, struct sockaddr*,  int*);
  556. typedef int(PASCAL * LPFN_SELECT)(int, fd_set*, fd_set*, fd_set*, const struct timeval*);
  557. typedef int(PASCAL * LPFN_SEND)(SOCKET, const char*, int, int);
  558. typedef int(PASCAL * LPFN_SENDTO)(SOCKET, const char*, int, int, const struct sockaddr*, int);
  559. typedef int(PASCAL * LPFN_SETSOCKOPT)(SOCKET, int, int, const char*, int);
  560. typedef int(PASCAL * LPFN_SHUTDOWN)(SOCKET, int);
  561. typedef SOCKET(PASCAL * LPFN_SOCKET)(int, int, int);
  562. typedef struct hostent*(PASCAL * LPFN_GETHOSTBYADDR)( const char*, int, int);
  563. typedef struct hostent*(PASCAL * LPFN_GETHOSTBYNAME)( const char*);
  564. typedef int(PASCAL * LPFN_GETHOSTNAME)(char*, int);
  565. typedef struct servent*(PASCAL * LPFN_GETSERVBYPORT)(int, const char*);
  566. typedef struct servent*(PASCAL * LPFN_GETSERVBYNAME)(const char*, const char*);
  567. typedef struct protoent*(PASCAL * LPFN_GETPROTOBYNUMBER)(int);
  568. typedef struct protoent*(PASCAL * LPFN_GETPROTOBYNAME)(const char*);
  569.  
  570. int PASCAL WSAStartup(WORD,LPWSADATA);
  571. int PASCAL WSACleanup(void);
  572. void PASCAL WSASetLastError(int);
  573. int PASCAL WSAGetLastError(void);
  574. typedef int(PASCAL * LPFN_WSASTARTUP)(WORD, LPWSADATA);
  575. typedef int(PASCAL * LPFN_WSACLEANUP)(void);
  576. typedef void(PASCAL * LPFN_WSASETLASTERROR)(int);
  577. typedef int(PASCAL * LPFN_WSAGETLASTERROR)(void);
  578. /*
  579.  * Pseudo-blocking functions are deprecated in WinSock2
  580.  * spec. Use threads instead.
  581.  */
  582. BOOL PASCAL WSAIsBlocking(void);
  583. int PASCAL WSAUnhookBlockingHook(void);
  584. FARPROC PASCAL WSASetBlockingHook(FARPROC);
  585. int PASCAL WSACancelBlockingCall(void);
  586. typedef BOOL(PASCAL * LPFN_WSAISBLOCKING)(void);
  587. typedef int(PASCAL * LPFN_WSAUNHOOKBLOCKINGHOOK)(void);
  588. typedef FARPROC (PASCAL * LPFN_WSASETBLOCKINGHOOK)(FARPROC);
  589. typedef int(PASCAL * LPFN_WSACANCELBLOCKINGCALL)(void);
  590.  
  591. HANDLE PASCAL WSAAsyncGetServByName(HWND,u_int,const char*,const char*,char*,int);
  592. HANDLE PASCAL WSAAsyncGetServByPort(HWND,u_int,int,const char*,char*,int);
  593. HANDLE PASCAL WSAAsyncGetProtoByName(HWND,u_int,const char*,char*,int);
  594. HANDLE PASCAL WSAAsyncGetProtoByNumber(HWND,u_int,int,char*,int);
  595. HANDLE PASCAL WSAAsyncGetHostByName(HWND,u_int,const char*,char*,int);
  596. HANDLE PASCAL WSAAsyncGetHostByAddr(HWND,u_int,const char*,int,int,char*,int);
  597. int PASCAL WSACancelAsyncRequest(HANDLE);
  598. int PASCAL WSAAsyncSelect(SOCKET,HWND,u_int,long);
  599. typedef HANDLE(PASCAL * LPFN_WSAASYNCGETSERVBYNAME)(HWND, u_int, const char *, const char *, char *, int);
  600. typedef HANDLE(PASCAL * LPFN_WSAASYNCGETSERVBYPORT)(HWND, u_int, int, const char *, char *, int);
  601. typedef HANDLE(PASCAL * LPFN_WSAASYNCGETPROTOBYNAME)(HWND, u_int, const char*, char*, int);
  602. typedef HANDLE(PASCAL * LPFN_WSAASYNCGETPROTOBYNUMBER)(HWND, u_int, int, char*, int);
  603. typedef HANDLE(PASCAL * LPFN_WSAASYNCGETHOSTBYADDR)(HWND, u_int, const char*, int, int, char*, int);
  604. typedef int(PASCAL * LPFN_WSACANCELASYNCREQUEST)(HANDLE);
  605. typedef int(PASCAL * LPFN_WSAASYNCSELECT)(SOCKET, HWND, u_int, long);
  606. #if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
  607. u_long PASCAL htonl(u_long);
  608. u_long PASCAL ntohl(u_long);
  609. u_short PASCAL htons(u_short);
  610. u_short PASCAL ntohs(u_short);
  611. int PASCAL select(int nfds,fd_set*,fd_set*,fd_set*,const struct timeval*);
  612. #endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
  613.  
  614. int PASCAL gethostname(char*,int);
  615.  
  616. #define WSAMAKEASYNCREPLY(b,e)    MAKELONG(b,e)
  617. #define WSAMAKESELECTREPLY(e,error)    MAKELONG(e,error)
  618. #define WSAGETASYNCBUFLEN(l)    LOWORD(l)
  619. #define WSAGETASYNCERROR(l)    HIWORD(l)
  620. #define WSAGETSELECTEVENT(l)    LOWORD(l)
  621. #define WSAGETSELECTERROR(l)    HIWORD(l)
  622.  
  623. typedef struct sockaddr SOCKADDR;
  624. typedef struct sockaddr *PSOCKADDR;
  625. typedef struct sockaddr *LPSOCKADDR;
  626. typedef struct sockaddr_storage SOCKADDR_STORAGE, *PSOCKADDR_STORAGE;
  627. typedef struct sockaddr_in SOCKADDR_IN;
  628. typedef struct sockaddr_in *PSOCKADDR_IN;
  629. typedef struct sockaddr_in *LPSOCKADDR_IN;
  630. typedef struct linger LINGER;
  631. typedef struct linger *PLINGER;
  632. typedef struct linger *LPLINGER;
  633. typedef struct in_addr IN_ADDR;
  634. typedef struct in_addr *PIN_ADDR;
  635. typedef struct in_addr *LPIN_ADDR;
  636. typedef struct fd_set FD_SET;
  637. typedef struct fd_set *PFD_SET;
  638. typedef struct fd_set *LPFD_SET;
  639. typedef struct hostent HOSTENT;
  640. typedef struct hostent *PHOSTENT;
  641. typedef struct hostent *LPHOSTENT;
  642. typedef struct servent SERVENT;
  643. typedef struct servent *PSERVENT;
  644. typedef struct servent *LPSERVENT;
  645. typedef struct protoent PROTOENT;
  646. typedef struct protoent *PPROTOENT;
  647. typedef struct protoent *LPPROTOENT;
  648. typedef struct timeval TIMEVAL;
  649. typedef struct timeval *PTIMEVAL;
  650. typedef struct timeval *LPTIMEVAL;
  651.  
  652. /* winsock2 additions */
  653. #define ADDR_ANY    INADDR_ANY
  654.  
  655. #define    IN_CLASSD(i)    (((long)(i) & 0xf0000000) == 0xe0000000)
  656. #define    IN_CLASSD_NET    0xf0000000
  657. #define    IN_CLASSD_NSHIFT    28
  658. #define    IN_CLASSD_HOST    0x0fffffff
  659. #define    IN_MULTICAST(i)    IN_CLASSD(i)
  660.  
  661. #define    FROM_PROTOCOL_INFO    (-1)
  662.  
  663. #define SO_DONTLINGER    (u_int)(~SO_LINGER)
  664. #define SO_GROUP_ID    0x2001
  665. #define SO_GROUP_PRIORITY    0x2002
  666. #define SO_MAX_MSG_SIZE    0x2003
  667. #define SO_PROTOCOL_INFOA    0x2004
  668. #define SO_PROTOCOL_INFOW    0x2005
  669. #ifdef UNICODE
  670. #define SO_PROTOCOL_INFO    SO_PROTOCOL_INFOW
  671. #else
  672. #define SO_PROTOCOL_INFO    SO_PROTOCOL_INFOA
  673. #endif
  674. #define PVD_CONFIG        0x3001
  675.  
  676. #define    MSG_INTERRUPT    0x10
  677. #define    MSG_MAXIOVLEN    16
  678.  
  679. #define    WSAAPI    WINAPI
  680. #define WSAEVENT    HANDLE
  681. #define    LPWSAEVENT    LPHANDLE
  682. #define    WSAOVERLAPPED    OVERLAPPED
  683. typedef    struct _OVERLAPPED    *LPWSAOVERLAPPED;
  684.  
  685. #define    WSA_IO_PENDING    (ERROR_IO_PENDING)
  686. #define    WSA_IO_INCOMPLETE    (ERROR_IO_INCOMPLETE)
  687. #define    WSA_INVALID_HANDLE    (ERROR_INVALID_HANDLE)
  688. #define    WSA_INVALID_PARAMETER    (ERROR_INVALID_PARAMETER)
  689. #define    WSA_NOT_ENOUGH_MEMORY    (ERROR_NOT_ENOUGH_MEMORY)
  690. #define    WSA_OPERATION_ABORTED    (ERROR_OPERATION_ABORTED)
  691.  
  692. #define    WSA_INVALID_EVENT    ((WSAEVENT)NULL)
  693. #define    WSA_MAXIMUM_WAIT_EVENTS    (MAXIMUM_WAIT_OBJECTS)
  694. #define    WSA_WAIT_FAILED    ((DWORD)-1L)
  695. #define    WSA_WAIT_EVENT_0    (WAIT_OBJECT_0)
  696. #define    WSA_WAIT_IO_COMPLETION    (WAIT_IO_COMPLETION)
  697. #define    WSA_WAIT_TIMEOUT    (WAIT_TIMEOUT)
  698. #define    WSA_INFINITE    (INFINITE)
  699.  
  700. typedef struct _WSABUF {
  701.     unsigned long len;
  702.     char *buf;
  703. } WSABUF, *LPWSABUF;
  704.  
  705. typedef enum
  706. {
  707.     BestEffortService,
  708.     ControlledLoadService,
  709.     PredictiveService,
  710.     GuaranteedDelayService,
  711.     GuaranteedService
  712. } GUARANTEE;
  713.  
  714. /* TODO: FLOWSPEC and related definitions belong in qos.h */
  715.  
  716. /*
  717.    Windows Sockets 2 Application Programming Interface,
  718.    revision 2.2.2 (1997) uses the type uint32 for SERVICETYPE
  719.    and the elements of _flowspec, but the type uint32 is not defined
  720.    or used anywhere else in the w32api. For now, just use
  721.    unsigned int, which is 32 bits on _WIN32 and _WIN64.
  722. */
  723.  
  724. typedef unsigned int    SERVICETYPE;
  725. typedef struct _flowspec
  726. {
  727.     unsigned int    TokenRate;
  728.     unsigned int    TokenBucketSize;
  729.     unsigned int    PeakBandwidth;
  730.     unsigned int    Latency;
  731.     unsigned int    DelayVariation;
  732.     SERVICETYPE    ServiceType;
  733.     unsigned int    MaxSduSize;
  734.     unsigned int    MinimumPolicedSize;
  735.    } FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC;
  736.  
  737. typedef struct _QualityOfService
  738. {
  739.     FLOWSPEC    SendingFlowspec;
  740.     FLOWSPEC    ReceivingFlowspec;
  741.     WSABUF    ProviderSpecific;
  742. } QOS, *LPQOS;
  743.  
  744. #define    CF_ACCEPT    0x0000
  745. #define    CF_REJECT    0x0001
  746. #define    CF_DEFER    0x0002
  747. #define    SD_RECEIVE    0x00
  748. #define    SD_SEND    0x01
  749. #define    SD_BOTH    0x02
  750. typedef unsigned int    GROUP;
  751.  
  752. #define SG_UNCONSTRAINED_GROUP    0x01
  753. #define SG_CONSTRAINED_GROUP    0x02
  754. typedef struct _WSANETWORKEVENTS {
  755.     long    lNetworkEvents;
  756.     int    iErrorCode[FD_MAX_EVENTS];
  757. } WSANETWORKEVENTS, *LPWSANETWORKEVENTS;
  758.  
  759. #define    MAX_PROTOCOL_CHAIN 7
  760.  
  761. #define    BASE_PROTOCOL      1
  762. #define    LAYERED_PROTOCOL   0
  763.  
  764. typedef enum _WSAESETSERVICEOP
  765. {
  766.     RNRSERVICE_REGISTER=0,
  767.     RNRSERVICE_DEREGISTER,
  768.     RNRSERVICE_DELETE
  769. } WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
  770.  
  771. typedef struct _AFPROTOCOLS {
  772.     INT iAddressFamily;
  773.     INT iProtocol;
  774. } AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
  775.  
  776. typedef enum _WSAEcomparator
  777. {
  778.     COMP_EQUAL = 0,
  779.     COMP_NOTLESS
  780. } WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
  781.  
  782. typedef struct _WSAVersion
  783. {
  784.     DWORD    dwVersion;
  785.     WSAECOMPARATOR    ecHow;
  786. } WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
  787.  
  788. #ifndef __CSADDR_T_DEFINED /* also in nspapi.h */
  789. #define __CSADDR_T_DEFINED
  790. typedef struct _SOCKET_ADDRESS {
  791.     LPSOCKADDR lpSockaddr;
  792.     INT iSockaddrLength;
  793. } SOCKET_ADDRESS,*PSOCKET_ADDRESS,*LPSOCKET_ADDRESS;
  794. typedef struct _CSADDR_INFO {
  795.     SOCKET_ADDRESS LocalAddr;
  796.     SOCKET_ADDRESS RemoteAddr;
  797.     INT iSocketType;
  798.     INT iProtocol;
  799. } CSADDR_INFO,*PCSADDR_INFO,*LPCSADDR_INFO;
  800. #endif
  801.  
  802. typedef struct _SOCKET_ADDRESS_LIST {
  803.     INT             iAddressCount;
  804.     SOCKET_ADDRESS  Address[1];
  805. } SOCKET_ADDRESS_LIST, * LPSOCKET_ADDRESS_LIST;
  806.  
  807. #ifndef __BLOB_T_DEFINED /* also in wtypes.h and nspapi.h */
  808. #define __BLOB_T_DEFINED
  809. typedef struct _BLOB {
  810.     ULONG    cbSize;
  811.     BYTE    *pBlobData;
  812. } BLOB,*PBLOB,*LPBLOB;
  813. #endif
  814.  
  815. typedef struct _WSAQuerySetA
  816. {
  817.     DWORD    dwSize;
  818.     LPSTR    lpszServiceInstanceName;
  819.     LPGUID    lpServiceClassId;
  820.     LPWSAVERSION    lpVersion;
  821.     LPSTR    lpszComment;
  822.     DWORD    dwNameSpace;
  823.     LPGUID    lpNSProviderId;
  824.     LPSTR    lpszContext;
  825.     DWORD    dwNumberOfProtocols;
  826.     LPAFPROTOCOLS    lpafpProtocols;
  827.     LPSTR    lpszQueryString;
  828.     DWORD    dwNumberOfCsAddrs;
  829.     LPCSADDR_INFO    lpcsaBuffer;
  830.     DWORD    dwOutputFlags;
  831.     LPBLOB    lpBlob;
  832. } WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
  833.  
  834. typedef struct _WSAQuerySetW
  835. {
  836.     DWORD    dwSize;
  837.     LPWSTR    lpszServiceInstanceName;
  838.     LPGUID    lpServiceClassId;
  839.     LPWSAVERSION    lpVersion;
  840.     LPWSTR    lpszComment;
  841.     DWORD    dwNameSpace;
  842.     LPGUID    lpNSProviderId;
  843.     LPWSTR    lpszContext;
  844.     DWORD    dwNumberOfProtocols;
  845.     LPAFPROTOCOLS    lpafpProtocols;
  846.     LPWSTR    lpszQueryString;
  847.     DWORD    dwNumberOfCsAddrs;
  848.     LPCSADDR_INFO    lpcsaBuffer;
  849.     DWORD    dwOutputFlags;
  850.     LPBLOB    lpBlob;
  851. } WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
  852.  
  853. #ifdef UNICODE
  854. typedef WSAQUERYSETW WSAQUERYSET;
  855. typedef PWSAQUERYSETW PWSAQUERYSET;
  856. typedef LPWSAQUERYSETW LPWSAQUERYSET;
  857. #else
  858. typedef WSAQUERYSETA WSAQUERYSET;
  859. typedef PWSAQUERYSETA PWSAQUERYSET;
  860. typedef LPWSAQUERYSETA LPWSAQUERYSET;
  861. #endif
  862.  
  863. #define LUP_DEEP                0x0001
  864. #define LUP_CONTAINERS          0x0002
  865. #define LUP_NOCONTAINERS        0x0004
  866. #define LUP_NEAREST             0x0008
  867. #define LUP_RETURN_NAME         0x0010
  868. #define LUP_RETURN_TYPE         0x0020
  869. #define LUP_RETURN_VERSION      0x0040
  870. #define LUP_RETURN_COMMENT      0x0080
  871. #define LUP_RETURN_ADDR         0x0100
  872. #define LUP_RETURN_BLOB         0x0200
  873. #define LUP_RETURN_ALIASES      0x0400
  874. #define LUP_RETURN_QUERY_STRING 0x0800
  875. #define LUP_RETURN_ALL          0x0FF0
  876. #define LUP_RES_SERVICE         0x8000
  877. #define LUP_FLUSHCACHE          0x1000
  878. #define LUP_FLUSHPREVIOUS       0x2000
  879.  
  880. typedef struct _WSANSClassInfoA
  881. {
  882.     LPSTR    lpszName;
  883.     DWORD    dwNameSpace;
  884.     DWORD    dwValueType;
  885.     DWORD    dwValueSize;
  886.     LPVOID    lpValue;
  887. } WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
  888.  
  889. typedef struct _WSANSClassInfoW
  890. {
  891.     LPWSTR    lpszName;
  892.     DWORD    dwNameSpace;
  893.     DWORD    dwValueType;
  894.     DWORD    dwValueSize;
  895.     LPVOID    lpValue;
  896. } WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
  897.  
  898. #ifdef UNICODE
  899. typedef WSANSCLASSINFOW WSANSCLASSINFO;
  900. typedef PWSANSCLASSINFOW PWSANSCLASSINFO;
  901. typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO;
  902. #else
  903. typedef WSANSCLASSINFOA WSANSCLASSINFO;
  904. typedef PWSANSCLASSINFOA PWSANSCLASSINFO;
  905. typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO;
  906. #endif
  907.  
  908. typedef struct _WSAServiceClassInfoA
  909. {
  910.     LPGUID    lpServiceClassId;
  911.     LPSTR    lpszServiceClassName;
  912.     DWORD    dwCount;
  913.     LPWSANSCLASSINFOA    lpClassInfos;
  914. } WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
  915.  
  916. typedef struct _WSAServiceClassInfoW
  917. {
  918.     LPGUID    lpServiceClassId;
  919.     LPWSTR    lpszServiceClassName;
  920.     DWORD    dwCount;
  921.     LPWSANSCLASSINFOW    lpClassInfos;
  922. } WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
  923.  
  924. #ifdef UNICODE
  925. typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO;
  926. typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO;
  927. typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO;
  928. #else
  929. typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO;
  930. typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO;
  931. typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO;
  932. #endif
  933.  
  934. typedef struct _WSANAMESPACE_INFOA {
  935.     GUID    NSProviderId;
  936.     DWORD    dwNameSpace;
  937.     BOOL    fActive;
  938.     DWORD    dwVersion;
  939.     LPSTR    lpszIdentifier;
  940. } WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
  941.  
  942. typedef struct _WSANAMESPACE_INFOW {
  943.     GUID    NSProviderId;
  944.     DWORD    dwNameSpace;
  945.     BOOL    fActive;
  946.     DWORD    dwVersion;
  947.     LPWSTR    lpszIdentifier;
  948. } WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
  949.  
  950. #ifdef UNICODE
  951. typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO;
  952. typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO;
  953. typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO;
  954. #else
  955. typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO;
  956. typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO;
  957. typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO;
  958. #endif
  959.  
  960. typedef struct _WSAPROTOCOLCHAIN {
  961.     int ChainLen;
  962.     DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
  963. } WSAPROTOCOLCHAIN, *LPWSAPROTOCOLCHAIN;
  964.  
  965. #define WSAPROTOCOL_LEN  255
  966.  
  967. typedef struct _WSAPROTOCOL_INFOA {
  968.     DWORD dwServiceFlags1;
  969.     DWORD dwServiceFlags2;
  970.     DWORD dwServiceFlags3;
  971.     DWORD dwServiceFlags4;
  972.     DWORD dwProviderFlags;
  973.     GUID ProviderId;
  974.     DWORD dwCatalogEntryId;
  975.     WSAPROTOCOLCHAIN ProtocolChain;
  976.     int iVersion;
  977.     int iAddressFamily;
  978.     int iMaxSockAddr;
  979.     int iMinSockAddr;
  980.     int iSocketType;
  981.     int iProtocol;
  982.     int iProtocolMaxOffset;
  983.     int iNetworkByteOrder;
  984.     int iSecurityScheme;
  985.     DWORD dwMessageSize;
  986.     DWORD dwProviderReserved;
  987.     CHAR szProtocol[WSAPROTOCOL_LEN+1];
  988. } WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA;
  989.  
  990. typedef struct _WSAPROTOCOL_INFOW {
  991.     DWORD dwServiceFlags1;
  992.     DWORD dwServiceFlags2;
  993.     DWORD dwServiceFlags3;
  994.     DWORD dwServiceFlags4;
  995.     DWORD dwProviderFlags;
  996.     GUID ProviderId;
  997.     DWORD dwCatalogEntryId;
  998.     WSAPROTOCOLCHAIN ProtocolChain;
  999.     int iVersion;
  1000.     int iAddressFamily;
  1001.     int iMaxSockAddr;
  1002.     int iMinSockAddr;
  1003.     int iSocketType;
  1004.     int iProtocol;
  1005.     int iProtocolMaxOffset;
  1006.     int iNetworkByteOrder;
  1007.     int iSecurityScheme;
  1008.     DWORD dwMessageSize;
  1009.     DWORD dwProviderReserved;
  1010.     WCHAR  szProtocol[WSAPROTOCOL_LEN+1];
  1011. } WSAPROTOCOL_INFOW, * LPWSAPROTOCOL_INFOW;
  1012.  
  1013. typedef int (CALLBACK *LPCONDITIONPROC)(LPWSABUF, LPWSABUF, LPQOS, LPQOS, LPWSABUF, LPWSABUF, GROUP *, DWORD);
  1014. typedef void (WINAPI *LPWSAOVERLAPPED_COMPLETION_ROUTINE)(DWORD, DWORD, LPWSAOVERLAPPED, DWORD);
  1015.  
  1016.  
  1017. #ifdef UNICODE
  1018. typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO;
  1019. typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO;
  1020. #else
  1021. typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO;
  1022. typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO;
  1023. #endif
  1024.  
  1025. /* Needed for XP & .NET Server function WSANSPIoctl.  */
  1026. typedef enum _WSACOMPLETIONTYPE {
  1027.     NSP_NOTIFY_IMMEDIATELY = 0,
  1028.     NSP_NOTIFY_HWND,
  1029.     NSP_NOTIFY_EVENT,
  1030.     NSP_NOTIFY_PORT,
  1031.     NSP_NOTIFY_APC
  1032. } WSACOMPLETIONTYPE, * PWSACOMPLETIONTYPE, * LPWSACOMPLETIONTYPE;
  1033. typedef struct _WSACOMPLETION {
  1034.     WSACOMPLETIONTYPE Type;
  1035.     union {
  1036.         struct {
  1037.             HWND hWnd;
  1038.             UINT uMsg;
  1039.             WPARAM context;
  1040.         } WindowMessage;
  1041.         struct {
  1042.             LPWSAOVERLAPPED lpOverlapped;
  1043.         } Event;
  1044.         struct {
  1045.             LPWSAOVERLAPPED lpOverlapped;
  1046.             LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
  1047.         } Apc;
  1048.         struct {
  1049.             LPWSAOVERLAPPED lpOverlapped;
  1050.             HANDLE hPort;
  1051.             ULONG_PTR Key;
  1052.         } Port;
  1053.     } Parameters;
  1054. } WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION;
  1055.  
  1056. #define PFL_MULTIPLE_PROTO_ENTRIES          0x00000001
  1057. #define PFL_RECOMMENDED_PROTO_ENTRY         0x00000002
  1058. #define PFL_HIDDEN                          0x00000004
  1059. #define PFL_MATCHES_PROTOCOL_ZERO           0x00000008
  1060. #define XP1_CONNECTIONLESS                  0x00000001
  1061. #define XP1_GUARANTEED_DELIVERY             0x00000002
  1062. #define XP1_GUARANTEED_ORDER                0x00000004
  1063. #define XP1_MESSAGE_ORIENTED                0x00000008
  1064. #define XP1_PSEUDO_STREAM                   0x00000010
  1065. #define XP1_GRACEFUL_CLOSE                  0x00000020
  1066. #define XP1_EXPEDITED_DATA                  0x00000040
  1067. #define XP1_CONNECT_DATA                    0x00000080
  1068. #define XP1_DISCONNECT_DATA                 0x00000100
  1069. #define XP1_SUPPORT_BROADCAST               0x00000200
  1070. #define XP1_SUPPORT_MULTIPOINT              0x00000400
  1071. #define XP1_MULTIPOINT_CONTROL_PLANE        0x00000800
  1072. #define XP1_MULTIPOINT_DATA_PLANE           0x00001000
  1073. #define XP1_QOS_SUPPORTED                   0x00002000
  1074. #define XP1_INTERRUPT                       0x00004000
  1075. #define XP1_UNI_SEND                        0x00008000
  1076. #define XP1_UNI_RECV                        0x00010000
  1077. #define XP1_IFS_HANDLES                     0x00020000
  1078. #define XP1_PARTIAL_MESSAGE                 0x00040000
  1079.  
  1080. #define BIGENDIAN                           0x0000
  1081. #define LITTLEENDIAN                        0x0001
  1082.  
  1083. #define SECURITY_PROTOCOL_NONE              0x0000
  1084. #define JL_SENDER_ONLY    0x01
  1085. #define JL_RECEIVER_ONLY  0x02
  1086. #define JL_BOTH           0x04
  1087. #define WSA_FLAG_OVERLAPPED           0x01
  1088. #define WSA_FLAG_MULTIPOINT_C_ROOT    0x02
  1089. #define WSA_FLAG_MULTIPOINT_C_LEAF    0x04
  1090. #define WSA_FLAG_MULTIPOINT_D_ROOT    0x08
  1091. #define WSA_FLAG_MULTIPOINT_D_LEAF    0x10
  1092. #define IOC_UNIX                      0x00000000
  1093. #define IOC_WS2                       0x08000000
  1094. #define IOC_PROTOCOL                  0x10000000
  1095. #define IOC_VENDOR                    0x18000000
  1096.  
  1097. #define _WSAIO(x,y)                   (IOC_VOID|(x)|(y))
  1098. #define _WSAIOR(x,y)                  (IOC_OUT|(x)|(y))
  1099. #define _WSAIOW(x,y)                  (IOC_IN|(x)|(y))
  1100. #define _WSAIORW(x,y)                 (IOC_INOUT|(x)|(y))
  1101.  
  1102. #define SIO_ASSOCIATE_HANDLE          _WSAIOW(IOC_WS2,1)
  1103. #define SIO_ENABLE_CIRCULAR_QUEUEING  _WSAIO(IOC_WS2,2)
  1104. #define SIO_FIND_ROUTE                _WSAIOR(IOC_WS2,3)
  1105. #define SIO_FLUSH                     _WSAIO(IOC_WS2,4)
  1106. #define SIO_GET_BROADCAST_ADDRESS     _WSAIOR(IOC_WS2,5)
  1107. #define SIO_GET_EXTENSION_FUNCTION_POINTER  _WSAIORW(IOC_WS2,6)
  1108. #define SIO_GET_QOS                   _WSAIORW(IOC_WS2,7)
  1109. #define SIO_GET_GROUP_QOS             _WSAIORW(IOC_WS2,8)
  1110. #define SIO_MULTIPOINT_LOOPBACK       _WSAIOW(IOC_WS2,9)
  1111. #define SIO_MULTICAST_SCOPE           _WSAIOW(IOC_WS2,10)
  1112. #define SIO_SET_QOS                   _WSAIOW(IOC_WS2,11)
  1113. #define SIO_SET_GROUP_QOS             _WSAIOW(IOC_WS2,12)
  1114. #define SIO_TRANSLATE_HANDLE          _WSAIORW(IOC_WS2,13)
  1115. #define SIO_ROUTING_INTERFACE_QUERY   _WSAIORW(IOC_WS2,20)
  1116. #define SIO_ROUTING_INTERFACE_CHANGE  _WSAIOW(IOC_WS2,21)
  1117. #define SIO_ADDRESS_LIST_QUERY        _WSAIOR(IOC_WS2,22)
  1118. #define SIO_ADDRESS_LIST_CHANGE       _WSAIO(IOC_WS2,23)
  1119. #define SIO_QUERY_TARGET_PNP_HANDLE   _WSAIOR(IOC_WS2,24)
  1120. #define SIO_NSP_NOTIFY_CHANGE         _WSAIOW(IOC_WS2,25)
  1121.  
  1122. #define TH_NETDEV    0x00000001
  1123. #define TH_TAPI    0x00000002
  1124.  
  1125. SOCKET WINAPI WSAAccept(SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD);
  1126. INT WINAPI WSAAddressToStringA(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD);
  1127. INT WINAPI WSAAddressToStringW(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD);
  1128. BOOL WINAPI WSACloseEvent(WSAEVENT);
  1129. int WINAPI WSAConnect(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS);
  1130. WSAEVENT WINAPI WSACreateEvent(void);
  1131. int WINAPI WSADuplicateSocketA(SOCKET, DWORD, LPWSAPROTOCOL_INFOA);
  1132. int WINAPI WSADuplicateSocketW(SOCKET, DWORD, LPWSAPROTOCOL_INFOW);
  1133. INT WINAPI WSAEnumNameSpaceProvidersA(LPDWORD, LPWSANAMESPACE_INFOA);
  1134. INT WINAPI WSAEnumNameSpaceProvidersW(LPDWORD, LPWSANAMESPACE_INFOW);
  1135. int WINAPI WSAEnumNetworkEvents(SOCKET, WSAEVENT, LPWSANETWORKEVENTS);
  1136. int WINAPI WSAEnumProtocolsA(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD);
  1137. int WINAPI WSAEnumProtocolsW(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD);
  1138. int WINAPI WSAEventSelect(SOCKET, WSAEVENT, long);
  1139. BOOL WINAPI WSAGetOverlappedResult(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD);
  1140. BOOL WINAPI WSAGetQOSByName(SOCKET, LPWSABUF, LPQOS);
  1141. INT WINAPI WSAGetServiceClassInfoA(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA);
  1142. INT WINAPI WSAGetServiceClassInfoW(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW);
  1143. INT WINAPI WSAGetServiceClassNameByClassIdA(LPGUID, LPSTR, LPDWORD);
  1144. INT WINAPI WSAGetServiceClassNameByClassIdW(LPGUID, LPWSTR, LPDWORD);
  1145. int WINAPI WSAHtonl(SOCKET, unsigned long, unsigned long *);
  1146. int WINAPI WSAHtons(SOCKET, unsigned short, unsigned short *);
  1147. INT WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA);
  1148. INT WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW);
  1149. int WINAPI WSAIoctl(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  1150. SOCKET WINAPI WSAJoinLeaf(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD);
  1151. INT WINAPI WSALookupServiceBeginA(LPWSAQUERYSETA, DWORD, LPHANDLE);
  1152. INT WINAPI WSALookupServiceBeginW(LPWSAQUERYSETW lpqsRestrictions, DWORD, LPHANDLE);
  1153. INT WINAPI WSALookupServiceNextA(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA);
  1154. INT WINAPI WSALookupServiceNextW(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW);
  1155. INT WINAPI WSALookupServiceEnd(HANDLE);
  1156. int WINAPI WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); /* XP or .NET Server */
  1157. int WINAPI WSANtohl(SOCKET, unsigned long, unsigned long *);
  1158. int WINAPI WSANtohs(SOCKET, unsigned short, unsigned short *);
  1159. int WINAPI WSARecv(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  1160. int WINAPI WSARecvDisconnect(SOCKET, LPWSABUF);
  1161. int WINAPI WSARecvFrom(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  1162. INT WINAPI WSARemoveServiceClass(LPGUID);
  1163. BOOL WINAPI WSAResetEvent(WSAEVENT);
  1164. int WINAPI WSASend(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  1165. int WINAPI WSASendDisconnect(SOCKET, LPWSABUF);
  1166. int WINAPI WSASendTo(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  1167. BOOL WINAPI WSASetEvent(WSAEVENT);
  1168. INT WSAAPI WSASetServiceA(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD);
  1169. INT WINAPI WSASetServiceW(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD);
  1170. SOCKET WINAPI WSASocketA(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD);
  1171. SOCKET WINAPI WSASocketW(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD);
  1172. INT WINAPI WSAStringToAddressA(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT);
  1173. INT WINAPI WSAStringToAddressW(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT);
  1174. DWORD WINAPI WSAWaitForMultipleEvents(DWORD, const WSAEVENT *, BOOL, DWORD, BOOL);
  1175. typedef SOCKET (WINAPI *LPFN_WSAACCEPT)(SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD);
  1176. typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGA)(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD);
  1177. typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGW)(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD);
  1178. typedef BOOL (WINAPI *LPFN_WSACLOSEEVENT)(WSAEVENT);
  1179. typedef int (WINAPI *LPFN_WSACONNECT)(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS);
  1180. typedef WSAEVENT (WINAPI *LPFN_WSACREATEEVENT)(void);
  1181. typedef int (WINAPI *LPFN_WSADUPLICATESOCKETA)(SOCKET, DWORD, LPWSAPROTOCOL_INFOA);
  1182. typedef int (WINAPI *LPFN_WSADUPLICATESOCKETW)(SOCKET, DWORD, LPWSAPROTOCOL_INFOW);
  1183. typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSA)(LPDWORD, LPWSANAMESPACE_INFOA);
  1184. typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSW)(LPDWORD, LPWSANAMESPACE_INFOW);
  1185. typedef int (WINAPI *LPFN_WSAENUMNETWORKEVENTS)(SOCKET, WSAEVENT, LPWSANETWORKEVENTS);
  1186. typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSA)(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD);
  1187. typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSW)(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD);
  1188. typedef int (WINAPI *LPFN_WSAEVENTSELECT)(SOCKET, WSAEVENT, long);
  1189. typedef BOOL (WINAPI *LPFN_WSAGETOVERLAPPEDRESULT)(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD);
  1190. typedef BOOL (WINAPI *LPFN_WSAGETQOSBYNAME)(SOCKET, LPWSABUF, LPQOS);
  1191. typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOA)(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA);
  1192. typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOW)(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW);
  1193. typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(LPGUID, LPSTR, LPDWORD);
  1194. typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(LPGUID, LPWSTR, LPDWORD);
  1195. typedef int (WINAPI *LPFN_WSAHTONL)(SOCKET, unsigned long, unsigned long *);
  1196. typedef int (WINAPI *LPFN_WSAHTONS)(SOCKET, unsigned short, unsigned short *);
  1197. typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSA)(LPWSASERVICECLASSINFOA);
  1198. typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSW)(LPWSASERVICECLASSINFOW);
  1199. typedef int (WINAPI *LPFN_WSAIOCTL)(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  1200. typedef SOCKET (WINAPI *LPFN_WSAJOINLEAF)(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD);
  1201. typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINA)(LPWSAQUERYSETA, DWORD, LPHANDLE);
  1202. typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINW)(LPWSAQUERYSETW, DWORD, LPHANDLE);
  1203. typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTA)(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA);
  1204. typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTW)(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW);
  1205. typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEEND)(HANDLE);
  1206. typedef int (WINAPI *LPFN_WSANSPIoctl)(HANDLE, DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION);
  1207. typedef int (WINAPI *LPFN_WSANTOHL)(SOCKET, unsigned long, unsigned long *);
  1208. typedef int (WINAPI *LPFN_WSANTOHS)(SOCKET, unsigned short, unsigned short *);
  1209. typedef int (WINAPI *LPFN_WSARECV)(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  1210. typedef int (WINAPI *LPFN_WSARECVDISCONNECT)(SOCKET, LPWSABUF);
  1211. typedef int (WINAPI *LPFN_WSARECVFROM)(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  1212. typedef INT (WINAPI *LPFN_WSAREMOVESERVICECLASS)(LPGUID);
  1213. typedef BOOL (WINAPI *LPFN_WSARESETEVENT)(WSAEVENT);
  1214. typedef int (WINAPI *LPFN_WSASEND)(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  1215. typedef int (WINAPI *LPFN_WSASENDDISCONNECT)(SOCKET, LPWSABUF);
  1216. typedef int (WINAPI *LPFN_WSASENDTO)(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  1217. typedef BOOL (WINAPI *LPFN_WSASETEVENT)(WSAEVENT);
  1218. typedef INT (WINAPI *LPFN_WSASETSERVICEA)(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD);
  1219. typedef INT (WINAPI *LPFN_WSASETSERVICEW)(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD);
  1220. typedef SOCKET (WINAPI *LPFN_WSASOCKETA)(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD);
  1221. typedef SOCKET (WINAPI *LPFN_WSASOCKETW)(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD);
  1222. typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSA)(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT);
  1223. typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSW)(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT);
  1224. typedef DWORD (WINAPI *LPFN_WSAWAITFORMULTIPLEEVENTS)(DWORD, const WSAEVENT *, BOOL, DWORD, BOOL);
  1225.  
  1226. #ifdef UNICODE
  1227. #define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGW
  1228. #define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETW
  1229. #define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
  1230. #define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSW
  1231. #define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOW
  1232. #define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW
  1233. #define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSW
  1234. #define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINW
  1235. #define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTW
  1236. #define LPFN_WSASETSERVICE  LPFN_WSASETSERVICEW
  1237. #define LPFN_WSASOCKET LPFN_WSASOCKETW
  1238. #define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSW
  1239. #define WSAAddressToString WSAAddressToStringW
  1240. #define WSADuplicateSocket WSADuplicateSocketW
  1241. #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
  1242. #define WSAEnumProtocols WSAEnumProtocolsW
  1243. #define WSAGetServiceClassInfo WSAGetServiceClassInfoW
  1244. #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW
  1245. #define WSASetService WSASetServiceW
  1246. #define WSASocket WSASocketW
  1247. #define WSAStringToAddress WSAStringToAddressW
  1248. #define WSALookupServiceBegin WSALookupServiceBeginW
  1249. #define WSALookupServiceNext WSALookupServiceNextW
  1250. #define WSAInstallServiceClass WSAInstallServiceClassW
  1251. #else
  1252. #define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGA
  1253. #define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETW
  1254. #define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSA
  1255. #define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSA
  1256. #define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOA
  1257. #define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA
  1258. #define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSA
  1259. #define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINA
  1260. #define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTA
  1261. #define LPFN_WSASETSERVICE  LPFN_WSASETSERVICEA
  1262. #define LPFN_WSASOCKET LPFN_WSASOCKETA
  1263. #define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSA
  1264. #define WSAAddressToString WSAAddressToStringA
  1265. #define WSADuplicateSocket WSADuplicateSocketA
  1266. #define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA
  1267. #define WSAEnumProtocols WSAEnumProtocolsA
  1268. #define WSAGetServiceClassInfo WSAGetServiceClassInfoA
  1269. #define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA
  1270. #define WSAInstallServiceClass WSAInstallServiceClassA
  1271. #define WSALookupServiceBegin WSALookupServiceBeginA
  1272. #define WSALookupServiceNext WSALookupServiceNextA
  1273. #define WSASocket WSASocketA
  1274. #define WSAStringToAddress WSAStringToAddressA
  1275. #define WSASetService WSASetServiceA
  1276. #endif
  1277.  
  1278. #ifdef __cplusplus
  1279. }
  1280. #endif
  1281. #endif
  1282.