OSDN Git Service

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