OSDN Git Service

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