PageRenderTime 72ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/win32/MinGW/include/winsock2.h

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