OSDN Git Service

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