OSDN Git Service

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