Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

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