OSDN Git Service

Clean up winsock default version selection stratagem.
[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, 2019, 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 #ifndef _WINSOCK2_H
42 #pragma GCC system_header
43 #define _WINSOCK2_H
44
45 /* This is MinGW's preferred WinSock default choice; having made it, we
46  * MUST now ensure that the __USE_MINGW_WINSOCK_DEFAULT selector doesn't
47  * persist beyond this point, since it would interfere with inclusion of
48  * common content from <winsock.h>
49  */
50 #undef __USE_MINGW_WINSOCK_DEFAULT
51
52 #ifdef _WINSOCK_H  /* included prematurely */
53 /* Oops!  <winsock.h> appears to have been included already, which now
54  * precludes any use of WinSock v2 protocol.
55  */
56 #error "Including <winsock2.h> after <winsock.h> is unsupported."
57 #warning "Falling back to WinSock v1.1 protocol."
58
59 #else   /* !_WINSOCK_H included prematurely */
60 /* This is correct WinSock v2 protocol usage: <winsock.h> has not been
61  * included previously, so we include it now, to establish definitions
62  * which are common to both WinSock v1 and WinSock v2 protocols.  This
63  * is filtered, on our prior definition of _WINSOCK2_H, to exclude any
64  * obsolete or conflicting definitions from WinSock v1, which are no
65  * longer applicable in WinSock v2, and on __WINSOCK2_DEPRECATED to
66  * identify any which remain available, but have been deprecated.
67  */
68 #define __WINSOCK2_DEPRECATED  __MINGW_ATTRIB_DEPRECATED
69 #include "winsock.h"
70
71 #define __WINSOCK2_H_SOURCED__
72
73 /* We need a definition for the BLOB data type; although an incomplete
74  * type definition would suffice here, other related headers, <nspapi.h>
75  * in particular, require the full definition, so we may just as well
76  * incorporate that here, by selective inclusion from "wtypes.h", by
77  * way of indirect inclusion from "nspapi.h"
78  */
79 #include "nspapi.h"
80
81 _BEGIN_C_DECLS
82
83 #define ADDR_ANY                          INADDR_ANY
84
85 #define IN_CLASSD(i)        (((long)(i) & 0xF0000000) == 0xE0000000)
86 #define IN_CLASSD_NET                     0xF0000000
87 #define IN_CLASSD_NSHIFT                          28
88 #define IN_CLASSD_HOST                    0x0FFFFFFF
89 #define IN_MULTICAST(i)                  IN_CLASSD(i)
90
91 #define FROM_PROTOCOL_INFO                       (-1)
92
93 #define SO_GROUP_ID                           0x2001
94 #define SO_GROUP_PRIORITY                     0x2002
95 #define SO_MAX_MSG_SIZE                       0x2003
96
97 #define SO_PROTOCOL_INFO        __AW_SUFFIXED__(SO_PROTOCOL_INFO)
98 #define SO_PROTOCOL_INFOA                     0x2004
99 #define SO_PROTOCOL_INFOW                     0x2005
100
101 #define PVD_CONFIG                            0x3001
102
103 #define MSG_INTERRUPT                           0x10
104
105 #define WSAAPI                                WINAPI
106 #define WSAEVENT                              HANDLE
107 #define LPWSAEVENT                          LPHANDLE
108 #define WSAOVERLAPPED                     OVERLAPPED
109
110 typedef struct _OVERLAPPED  *LPWSAOVERLAPPED;
111
112 #define WSA_IO_PENDING                  (ERROR_IO_PENDING)
113 #define WSA_IO_INCOMPLETE               (ERROR_IO_INCOMPLETE)
114 #define WSA_INVALID_HANDLE              (ERROR_INVALID_HANDLE)
115 #define WSA_INVALID_PARAMETER           (ERROR_INVALID_PARAMETER)
116 #define WSA_NOT_ENOUGH_MEMORY           (ERROR_NOT_ENOUGH_MEMORY)
117 #define WSA_OPERATION_ABORTED           (ERROR_OPERATION_ABORTED)
118
119 #define WSA_INVALID_EVENT               ((WSAEVENT)NULL)
120 #define WSA_MAXIMUM_WAIT_EVENTS         (MAXIMUM_WAIT_OBJECTS)
121 #define WSA_WAIT_FAILED                 ((DWORD)-1L)
122 #define WSA_WAIT_EVENT_0                (WAIT_OBJECT_0)
123 #define WSA_WAIT_IO_COMPLETION          (WAIT_IO_COMPLETION)
124 #define WSA_WAIT_TIMEOUT                (WAIT_TIMEOUT)
125 #define WSA_INFINITE                    (INFINITE)
126
127 typedef
128 struct _WSABUF
129 { unsigned long          len;
130   char                  *buf;
131 } WSABUF, *LPWSABUF;
132
133 typedef enum
134 { BestEffortService,
135   ControlledLoadService,
136   PredictiveService,
137   GuaranteedDelayService,
138   GuaranteedService
139 } GUARANTEE;
140
141 /* IPv6 protocol options: these are additional to protocol option constants
142  * already defined in <winsock.h>; they are unsupported prior to WinSock v2.
143  */
144 #define IPPROTO_HOPOPTS                            0  /* IPv6 Hop-by-Hop options */
145 #define IPPROTO_IPV6                              41  /* IPv6 header */
146 #define IPPROTO_ROUTING                           43  /* IPv6 Routing header */
147 #define IPPROTO_FRAGMENT                          44  /* IPv6 fragmentation header */
148 #define IPPROTO_ESP                               50  /* encapsulating security payload */
149 #define IPPROTO_AH                                51  /* authentication header */
150 #define IPPROTO_ICMPV6                            58  /* ICMPv6 */
151 #define IPPROTO_NONE                              59  /* IPv6 no next header */
152 #define IPPROTO_DSTOPTS                           60  /* IPv6 Destination options */
153
154 /* Address family definitions: these extend the set which has been defined
155  * already, in <winsock.h>; they are applicable only for WinSock v2.
156  */
157 #define AF_CLUSTER                                24
158 #define AF_12844                                  25
159 #define AF_IRDA                                   26
160 #define AF_NETDES                                 28
161
162 #ifndef __INSIDE_MSYS__
163 /* MSYS provides its own definition for AF_MAX; otherwise, <winsock.h> has
164  * already defined it as 24, but we need to override that to accommodate the
165  * additional constants, defined above.
166  */
167 #undef  AF_MAX
168 #define AF_MAX                                    29
169
170 /* Portable IPv6/IPv4 version of sockaddr, based on RFC 2553.
171  * The sockaddr_storage structure is padded to force 8 byte alignment of
172  * its member fields, and its size is fixed at 128 bytes.
173  *
174  * Desired design maximum size and alignment.
175  */
176 #define _SS_MAXSIZE                              128
177 #define _SS_ALIGNSIZE                   sizeof(__int64)
178
179 /* Definitions used for sockaddr_storage structure padding.
180  */
181 #define _SS_PAD1SIZE   (_SS_ALIGNSIZE - sizeof(short))
182 #define _SS_PAD2SIZE   (_SS_MAXSIZE - (sizeof(short) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
183
184 struct sockaddr_storage
185 { short                 ss_family;
186   char                __ss_pad1[_SS_PAD1SIZE];  /* pad to 8 */
187   __int64             __ss_align;               /* force alignment */
188   char                __ss_pad2[_SS_PAD2SIZE];  /* pad to 128 */
189 };
190
191 /* As in the case of AF_MAX, MSYS provides its own value for SOMAXCONN;
192  * otherwise, <winsock.h> has already defined it, with a value of 5; this
193  * was correct for WinSock v1.1, but we must now override it with this
194  * alternative definition, to make it correct for WinSock v2.
195  */
196 #undef  SOMAXCONN
197 #define SOMAXCONN                         0x7FFFFFFF
198
199 /* SO_EXCLUSIVEADDRUSE is not applicable, prior to WinSock v2; it is
200  * derived from SO_REUSEADDR, which has been defined in <winsock.h>
201  */
202 #define SO_EXCLUSIVEADDRUSE             ((u_int)(~SO_REUSEADDR))
203 #endif  /* !__INSIDE_MSYS__ */
204
205 /* FIXME: FLOWSPEC and related definitions belong in qos.h */
206
207 /* Windows Sockets 2 Application Programming Interface,
208  * revision 2.2.2 (1997) uses the type uint32 for SERVICETYPE
209  * and the elements of _flowspec, but the type uint32 is not defined
210  * or used anywhere else in the w32api. For now, just use
211  * unsigned int, which is 32 bits on _WIN32 and _WIN64.
212  */
213 typedef unsigned int  SERVICETYPE;
214
215 typedef
216 struct _flowspec
217 { unsigned int           TokenRate;
218   unsigned int           TokenBucketSize;
219   unsigned int           PeakBandwidth;
220   unsigned int           Latency;
221   unsigned int           DelayVariation;
222   SERVICETYPE            ServiceType;
223   unsigned int           MaxSduSize;
224   unsigned int           MinimumPolicedSize;
225 } FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC;
226
227 typedef
228 struct _QualityOfService
229 { FLOWSPEC               SendingFlowspec;
230   FLOWSPEC               ReceivingFlowspec;
231   WSABUF                 ProviderSpecific;
232 } QOS, *LPQOS;
233
234 #define CF_ACCEPT                             0x0000
235 #define CF_REJECT                             0x0001
236 #define CF_DEFER                              0x0002
237
238 typedef unsigned int  GROUP;
239
240 #define SG_UNCONSTRAINED_GROUP                  0x01
241 #define SG_CONSTRAINED_GROUP                    0x02
242
243 typedef
244 struct _WSANETWORKEVENTS
245 { long                   lNetworkEvents;
246   int                    iErrorCode[FD_MAX_EVENTS];
247 } WSANETWORKEVENTS, *LPWSANETWORKEVENTS;
248
249 #define MAX_PROTOCOL_CHAIN                         7
250
251 #define BASE_PROTOCOL                              1
252 #define LAYERED_PROTOCOL                           0
253
254 typedef
255 enum _WSAESETSERVICEOP
256 { RNRSERVICE_REGISTER                           =  0,
257   RNRSERVICE_DEREGISTER,
258   RNRSERVICE_DELETE
259 } WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
260
261 typedef
262 struct _AFPROTOCOLS
263 { INT                    iAddressFamily;
264   INT                    iProtocol;
265 } AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
266
267 typedef
268 enum _WSAEcomparator
269 { COMP_EQUAL                                    =  0,
270   COMP_NOTLESS
271 } WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
272
273 typedef
274 struct _WSAVersion
275 { DWORD                  dwVersion;
276   WSAECOMPARATOR         ecHow;
277 } WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
278
279 typedef
280 struct _SOCKET_ADDRESS_LIST
281 { INT                    iAddressCount;
282   SOCKET_ADDRESS         Address[1];
283 } SOCKET_ADDRESS_LIST, *LPSOCKET_ADDRESS_LIST;
284
285 typedef
286 struct _WSAQuerySetA
287 { DWORD                  dwSize;
288   LPSTR                  lpszServiceInstanceName;
289   LPGUID                 lpServiceClassId;
290   LPWSAVERSION           lpVersion;
291   LPSTR                  lpszComment;
292   DWORD                  dwNameSpace;
293   LPGUID                 lpNSProviderId;
294   LPSTR                  lpszContext;
295   DWORD                  dwNumberOfProtocols;
296   LPAFPROTOCOLS          lpafpProtocols;
297   LPSTR                  lpszQueryString;
298   DWORD                  dwNumberOfCsAddrs;
299   LPCSADDR_INFO          lpcsaBuffer;
300   DWORD                  dwOutputFlags;
301   LPBLOB                 lpBlob;
302 } WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
303
304 typedef
305 struct _WSAQuerySetW
306 { DWORD                  dwSize;
307   LPWSTR                 lpszServiceInstanceName;
308   LPGUID                 lpServiceClassId;
309   LPWSAVERSION           lpVersion;
310   LPWSTR                 lpszComment;
311   DWORD                  dwNameSpace;
312   LPGUID                 lpNSProviderId;
313   LPWSTR                 lpszContext;
314   DWORD                  dwNumberOfProtocols;
315   LPAFPROTOCOLS          lpafpProtocols;
316   LPWSTR                 lpszQueryString;
317   DWORD                  dwNumberOfCsAddrs;
318   LPCSADDR_INFO          lpcsaBuffer;
319   DWORD                  dwOutputFlags;
320   LPBLOB                 lpBlob;
321 } WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
322
323 typedef __AW_ALIAS__( WSAQUERYSET );
324 typedef __AW_ALIAS__( PWSAQUERYSET );
325 typedef __AW_ALIAS__( LPWSAQUERYSET );
326
327 #define LUP_DEEP                              0x0001
328 #define LUP_CONTAINERS                        0x0002
329 #define LUP_NOCONTAINERS                      0x0004
330 #define LUP_NEAREST                           0x0008
331 #define LUP_RETURN_NAME                       0x0010
332 #define LUP_RETURN_TYPE                       0x0020
333 #define LUP_RETURN_VERSION                    0x0040
334 #define LUP_RETURN_COMMENT                    0x0080
335 #define LUP_RETURN_ADDR                       0x0100
336 #define LUP_RETURN_BLOB                       0x0200
337 #define LUP_RETURN_ALIASES                    0x0400
338 #define LUP_RETURN_QUERY_STRING               0x0800
339 #define LUP_RETURN_ALL                        0x0FF0
340 #define LUP_RES_SERVICE                       0x8000
341 #define LUP_FLUSHCACHE                        0x1000
342 #define LUP_FLUSHPREVIOUS                     0x2000
343
344 typedef
345 struct _WSANSClassInfoA
346 { LPSTR                  lpszName;
347   DWORD                  dwNameSpace;
348   DWORD                  dwValueType;
349   DWORD                  dwValueSize;
350   LPVOID                 lpValue;
351 } WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
352
353 typedef
354 struct _WSANSClassInfoW
355 { LPWSTR                 lpszName;
356   DWORD                  dwNameSpace;
357   DWORD                  dwValueType;
358   DWORD                  dwValueSize;
359   LPVOID                 lpValue;
360 } WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
361
362 typedef __AW_ALIAS__( WSANSCLASSINFO );
363 typedef __AW_ALIAS__( PWSANSCLASSINFO );
364 typedef __AW_ALIAS__( LPWSANSCLASSINFO );
365
366 typedef
367 struct _WSAServiceClassInfoA
368 { LPGUID                 lpServiceClassId;
369   LPSTR                  lpszServiceClassName;
370   DWORD                  dwCount;
371   LPWSANSCLASSINFOA      lpClassInfos;
372 } WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
373
374 typedef
375 struct _WSAServiceClassInfoW
376 { LPGUID                 lpServiceClassId;
377   LPWSTR                 lpszServiceClassName;
378   DWORD                  dwCount;
379   LPWSANSCLASSINFOW      lpClassInfos;
380 } WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
381
382 typedef __AW_ALIAS__( WSASERVICECLASSINFO );
383 typedef __AW_ALIAS__( PWSASERVICECLASSINFO );
384 typedef __AW_ALIAS__( LPWSASERVICECLASSINFO );
385
386 typedef
387 struct _WSANAMESPACE_INFOA
388 { GUID                   NSProviderId;
389   DWORD                  dwNameSpace;
390   BOOL                   fActive;
391   DWORD                  dwVersion;
392   LPSTR                  lpszIdentifier;
393 } WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
394
395 typedef
396 struct _WSANAMESPACE_INFOW
397 { GUID                   NSProviderId;
398   DWORD                  dwNameSpace;
399   BOOL                   fActive;
400   DWORD                  dwVersion;
401   LPWSTR                 lpszIdentifier;
402 } WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
403
404 typedef __AW_ALIAS__( WSANAMESPACE_INFO );
405 typedef __AW_ALIAS__( PWSANAMESPACE_INFO );
406 typedef __AW_ALIAS__( LPWSANAMESPACE_INFO );
407
408 typedef
409 struct _WSAPROTOCOLCHAIN
410 { int                    ChainLen;
411   DWORD                  ChainEntries[MAX_PROTOCOL_CHAIN];
412 } WSAPROTOCOLCHAIN, *LPWSAPROTOCOLCHAIN;
413
414 #define WSAPROTOCOL_LEN                          255
415
416 typedef
417 struct _WSAPROTOCOL_INFOA
418 { DWORD                  dwServiceFlags1;
419   DWORD                  dwServiceFlags2;
420   DWORD                  dwServiceFlags3;
421   DWORD                  dwServiceFlags4;
422   DWORD                  dwProviderFlags;
423   GUID                   ProviderId;
424   DWORD                  dwCatalogEntryId;
425   WSAPROTOCOLCHAIN       ProtocolChain;
426   int                    iVersion;
427   int                    iAddressFamily;
428   int                    iMaxSockAddr;
429   int                    iMinSockAddr;
430   int                    iSocketType;
431   int                    iProtocol;
432   int                    iProtocolMaxOffset;
433   int                    iNetworkByteOrder;
434   int                    iSecurityScheme;
435   DWORD                  dwMessageSize;
436   DWORD                  dwProviderReserved;
437   CHAR                   szProtocol[WSAPROTOCOL_LEN+1];
438 } WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA;
439
440 typedef
441 struct _WSAPROTOCOL_INFOW
442 { DWORD                  dwServiceFlags1;
443   DWORD                  dwServiceFlags2;
444   DWORD                  dwServiceFlags3;
445   DWORD                  dwServiceFlags4;
446   DWORD                  dwProviderFlags;
447   GUID                   ProviderId;
448   DWORD                  dwCatalogEntryId;
449   WSAPROTOCOLCHAIN       ProtocolChain;
450   int                    iVersion;
451   int                    iAddressFamily;
452   int                    iMaxSockAddr;
453   int                    iMinSockAddr;
454   int                    iSocketType;
455   int                    iProtocol;
456   int                    iProtocolMaxOffset;
457   int                    iNetworkByteOrder;
458   int                    iSecurityScheme;
459   DWORD                  dwMessageSize;
460   DWORD                  dwProviderReserved;
461   WCHAR                  szProtocol[WSAPROTOCOL_LEN+1];
462 } WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW;
463
464 typedef __AW_ALIAS__( WSAPROTOCOL_INFO );
465 typedef __AW_ALIAS__( LPWSAPROTOCOL_INFO );
466
467 typedef int (CALLBACK *LPCONDITIONPROC) (LPWSABUF, LPWSABUF, LPQOS, LPQOS, LPWSABUF, LPWSABUF, GROUP *, DWORD);
468 typedef void (WINAPI *LPWSAOVERLAPPED_COMPLETION_ROUTINE) (DWORD, DWORD, LPWSAOVERLAPPED, DWORD);
469
470 /* Needed for XP & .NET Server function WSANSPIoctl. */
471
472 typedef
473 enum _WSACOMPLETIONTYPE
474 { NSP_NOTIFY_IMMEDIATELY                        =  0,
475   NSP_NOTIFY_HWND,
476   NSP_NOTIFY_EVENT,
477   NSP_NOTIFY_PORT,
478   NSP_NOTIFY_APC
479 } WSACOMPLETIONTYPE, *PWSACOMPLETIONTYPE, *LPWSACOMPLETIONTYPE;
480
481 typedef
482 struct _WSACOMPLETION
483 { WSACOMPLETIONTYPE                              Type;
484   union
485   { struct
486     { HWND                                           hWnd;
487       UINT                                           uMsg;
488       WPARAM                                         context;
489     }                                              WindowMessage;
490     struct
491     { LPWSAOVERLAPPED                                lpOverlapped;
492     }                                              Event;
493     struct
494     { LPWSAOVERLAPPED                                lpOverlapped;
495       LPWSAOVERLAPPED_COMPLETION_ROUTINE             lpfnCompletionProc;
496     }                                              Apc;
497     struct
498     { LPWSAOVERLAPPED                                lpOverlapped;
499       HANDLE                                         hPort;
500       ULONG_PTR                                      Key;
501     }                                              Port;
502   }                                              Parameters;
503 } WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION;
504
505 #define PFL_MULTIPLE_PROTO_ENTRIES                0x00000001
506 #define PFL_RECOMMENDED_PROTO_ENTRY               0x00000002
507 #define PFL_HIDDEN                                0x00000004
508 #define PFL_MATCHES_PROTOCOL_ZERO                 0x00000008
509 #define XP1_CONNECTIONLESS                        0x00000001
510 #define XP1_GUARANTEED_DELIVERY                   0x00000002
511 #define XP1_GUARANTEED_ORDER                      0x00000004
512 #define XP1_MESSAGE_ORIENTED                      0x00000008
513 #define XP1_PSEUDO_STREAM                         0x00000010
514 #define XP1_GRACEFUL_CLOSE                        0x00000020
515 #define XP1_EXPEDITED_DATA                        0x00000040
516 #define XP1_CONNECT_DATA                          0x00000080
517 #define XP1_DISCONNECT_DATA                       0x00000100
518 #define XP1_SUPPORT_BROADCAST                     0x00000200
519 #define XP1_SUPPORT_MULTIPOINT                    0x00000400
520 #define XP1_MULTIPOINT_CONTROL_PLANE              0x00000800
521 #define XP1_MULTIPOINT_DATA_PLANE                 0x00001000
522 #define XP1_QOS_SUPPORTED                         0x00002000
523 #define XP1_INTERRUPT                             0x00004000
524 #define XP1_UNI_SEND                              0x00008000
525 #define XP1_UNI_RECV                              0x00010000
526 #define XP1_IFS_HANDLES                           0x00020000
527 #define XP1_PARTIAL_MESSAGE                       0x00040000
528
529 #define BIGENDIAN                                     0x0000
530 #define LITTLEENDIAN                                  0x0001
531
532 #define SECURITY_PROTOCOL_NONE                        0x0000
533 #define JL_SENDER_ONLY                                  0x01
534 #define JL_RECEIVER_ONLY                                0x02
535 #define JL_BOTH                                         0x04
536 #define WSA_FLAG_OVERLAPPED                             0x01
537 #define WSA_FLAG_MULTIPOINT_C_ROOT                      0x02
538 #define WSA_FLAG_MULTIPOINT_C_LEAF                      0x04
539 #define WSA_FLAG_MULTIPOINT_D_ROOT                      0x08
540 #define WSA_FLAG_MULTIPOINT_D_LEAF                      0x10
541 #define IOC_UNIX                                  0x00000000
542 #define IOC_WS2                                   0x08000000
543 #define IOC_PROTOCOL                              0x10000000
544 #define IOC_VENDOR                                0x18000000
545
546 #define _WSAIO(x,y)                             (IOC_VOID|(x)|(y))
547 #define _WSAIOR(x,y)                            (IOC_OUT|(x)|(y))
548 #define _WSAIOW(x,y)                            (IOC_IN|(x)|(y))
549 #define _WSAIORW(x,y)                           (IOC_INOUT|(x)|(y))
550
551 #define SIO_ASSOCIATE_HANDLE                    _WSAIOW(IOC_WS2,1)
552 #define SIO_ENABLE_CIRCULAR_QUEUEING            _WSAIO(IOC_WS2,2)
553 #define SIO_FIND_ROUTE                          _WSAIOR(IOC_WS2,3)
554 #define SIO_FLUSH                               _WSAIO(IOC_WS2,4)
555 #define SIO_GET_BROADCAST_ADDRESS               _WSAIOR(IOC_WS2,5)
556 #define SIO_GET_EXTENSION_FUNCTION_POINTER      _WSAIORW(IOC_WS2,6)
557 #define SIO_GET_QOS                             _WSAIORW(IOC_WS2,7)
558 #define SIO_GET_GROUP_QOS                       _WSAIORW(IOC_WS2,8)
559 #define SIO_MULTIPOINT_LOOPBACK                 _WSAIOW(IOC_WS2,9)
560 #define SIO_MULTICAST_SCOPE                     _WSAIOW(IOC_WS2,10)
561 #define SIO_SET_QOS                             _WSAIOW(IOC_WS2,11)
562 #define SIO_SET_GROUP_QOS                       _WSAIOW(IOC_WS2,12)
563 #define SIO_TRANSLATE_HANDLE                    _WSAIORW(IOC_WS2,13)
564 #define SIO_ROUTING_INTERFACE_QUERY             _WSAIORW(IOC_WS2,20)
565 #define SIO_ROUTING_INTERFACE_CHANGE            _WSAIOW(IOC_WS2,21)
566 #define SIO_ADDRESS_LIST_QUERY                  _WSAIOR(IOC_WS2,22)
567 #define SIO_ADDRESS_LIST_CHANGE                 _WSAIO(IOC_WS2,23)
568 #define SIO_QUERY_TARGET_PNP_HANDLE             _WSAIOR(IOC_WS2,24)
569 #define SIO_NSP_NOTIFY_CHANGE                   _WSAIOW(IOC_WS2,25)
570 #define SIO_UDP_CONNRESET                       _WSAIOW(IOC_VENDOR,12)
571
572 #define TH_NETDEV                                 0x00000001
573 #define TH_TAPI                                   0x00000002
574
575 typedef SOCKET (PASCAL *LPFN_ACCEPT) (SOCKET, struct sockaddr *, int *);
576
577 typedef int (PASCAL *LPFN_BIND) (SOCKET, const struct sockaddr *, int);
578 typedef int (PASCAL *LPFN_CLOSESOCKET) (SOCKET);
579 typedef int (PASCAL *LPFN_CONNECT) (SOCKET, const struct sockaddr *, int);
580 typedef int (PASCAL *LPFN_IOCTLSOCKET) (SOCKET, long, u_long *);
581 typedef int (PASCAL *LPFN_GETPEERNAME) (SOCKET, struct sockaddr *, int *);
582 typedef int (PASCAL *LPFN_GETSOCKNAME) (SOCKET, struct sockaddr *, int *);
583 typedef int (PASCAL *LPFN_GETSOCKOPT) (SOCKET, int, int, char *, int *);
584
585 typedef u_long (PASCAL *LPFN_HTONL) (u_long);
586 typedef u_short (PASCAL *LPFN_HTONS) (u_short);
587
588 typedef unsigned long (PASCAL *LPFN_INET_ADDR) (const char *);
589
590 typedef char *(PASCAL *LPFN_INET_NTOA) (struct in_addr);
591
592 typedef int (PASCAL *LPFN_LISTEN) (SOCKET, int);
593
594 typedef u_long (PASCAL *LPFN_NTOHL) (u_long);
595 typedef u_short (PASCAL *LPFN_NTOHS) (u_short);
596
597 typedef int (PASCAL *LPFN_RECV) (SOCKET, char *, int, int);
598 typedef int (PASCAL *LPFN_RECVFROM) (SOCKET, char *, int, int, struct sockaddr *, int *);
599 typedef int (PASCAL *LPFN_SELECT) (int, fd_set *, fd_set *, fd_set *, const struct timeval *);
600 typedef int (PASCAL *LPFN_SEND) (SOCKET, const char *, int, int);
601 typedef int (PASCAL *LPFN_SENDTO) (SOCKET, const char *, int, int, const struct sockaddr *, int);
602 typedef int (PASCAL *LPFN_SETSOCKOPT) (SOCKET, int, int, const char *, int);
603 typedef int (PASCAL *LPFN_SHUTDOWN) (SOCKET, int);
604
605 typedef SOCKET (PASCAL *LPFN_SOCKET) (int, int, int);
606
607 typedef struct hostent *(PASCAL *LPFN_GETHOSTBYADDR) ( const char *, int, int);
608 typedef struct hostent *(PASCAL *LPFN_GETHOSTBYNAME) ( const char *);
609
610 typedef int (PASCAL *LPFN_GETHOSTNAME) (char *, int);
611
612 typedef struct servent *(PASCAL *LPFN_GETSERVBYPORT) (int, const char *);
613 typedef struct servent *(PASCAL *LPFN_GETSERVBYNAME) (const char *, const char *);
614 typedef struct protoent *(PASCAL *LPFN_GETPROTOBYNUMBER) (int);
615 typedef struct protoent *(PASCAL *LPFN_GETPROTOBYNAME) (const char *);
616
617 typedef int (PASCAL *LPFN_WSASTARTUP) (WORD, LPWSADATA);
618 typedef int (PASCAL *LPFN_WSACLEANUP) (void);
619 typedef int (PASCAL *LPFN_WSAGETLASTERROR) (void);
620 typedef void (PASCAL *LPFN_WSASETLASTERROR) (int);
621
622 typedef BOOL (PASCAL *LPFN_WSAISBLOCKING) (void);
623 typedef int (PASCAL *LPFN_WSAUNHOOKBLOCKINGHOOK) (void);
624 typedef FARPROC (PASCAL *LPFN_WSASETBLOCKINGHOOK) (FARPROC);
625 typedef int (PASCAL *LPFN_WSACANCELBLOCKINGCALL) (void);
626
627 typedef HANDLE (PASCAL *LPFN_WSAASYNCGETSERVBYNAME) (HWND, u_int, const char *, const char *, char *, int);
628 typedef HANDLE (PASCAL *LPFN_WSAASYNCGETSERVBYPORT) (HWND, u_int, int, const char *, char *, int);
629 typedef HANDLE (PASCAL *LPFN_WSAASYNCGETPROTOBYNAME) (HWND, u_int, const char*, char*, int);
630 typedef HANDLE (PASCAL *LPFN_WSAASYNCGETPROTOBYNUMBER) (HWND, u_int, int, char*, int);
631 typedef HANDLE (PASCAL *LPFN_WSAASYNCGETHOSTBYADDR) (HWND, u_int, const char*, int, int, char*, int);
632
633 typedef int (PASCAL *LPFN_WSACANCELASYNCREQUEST) (HANDLE);
634 typedef int (PASCAL *LPFN_WSAASYNCSELECT) (SOCKET, HWND, u_int, long);
635
636 typedef struct sockaddr_storage SOCKADDR_STORAGE, *PSOCKADDR_STORAGE;
637
638 WINSOCK_API_LINKAGE SOCKET WINAPI WSAAccept (SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD);
639
640 #define WSAAddressToString __AW_SUFFIXED__(WSAAddressToString)
641 WINSOCK_API_LINKAGE INT WINAPI WSAAddressToStringA (LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD);
642 WINSOCK_API_LINKAGE INT WINAPI WSAAddressToStringW (LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD);
643
644 WINSOCK_API_LINKAGE BOOL WINAPI WSACloseEvent (WSAEVENT);
645 WINSOCK_API_LINKAGE int WINAPI WSAConnect (SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS);
646 WINSOCK_API_LINKAGE WSAEVENT WINAPI WSACreateEvent (void);
647
648 #define WSADuplicateSocket __AW_SUFFIXED__(WSADuplicateSocket)
649 WINSOCK_API_LINKAGE int WINAPI WSADuplicateSocketA (SOCKET, DWORD, LPWSAPROTOCOL_INFOA);
650 WINSOCK_API_LINKAGE int WINAPI WSADuplicateSocketW (SOCKET, DWORD, LPWSAPROTOCOL_INFOW);
651
652 #define WSAEnumNameSpaceProviders __AW_SUFFIXED__(WSAEnumNameSpaceProviders)
653 WINSOCK_API_LINKAGE INT WINAPI WSAEnumNameSpaceProvidersA (LPDWORD, LPWSANAMESPACE_INFOA);
654 WINSOCK_API_LINKAGE INT WINAPI WSAEnumNameSpaceProvidersW (LPDWORD, LPWSANAMESPACE_INFOW);
655
656 WINSOCK_API_LINKAGE int WINAPI WSAEnumNetworkEvents (SOCKET, WSAEVENT, LPWSANETWORKEVENTS);
657
658 #define WSAEnumProtocols __AW_SUFFIXED__(WSAEnumProtocols)
659 WINSOCK_API_LINKAGE int WINAPI WSAEnumProtocolsA (LPINT, LPWSAPROTOCOL_INFOA, LPDWORD);
660 WINSOCK_API_LINKAGE int WINAPI WSAEnumProtocolsW (LPINT, LPWSAPROTOCOL_INFOW, LPDWORD);
661
662 WINSOCK_API_LINKAGE int WINAPI WSAEventSelect (SOCKET, WSAEVENT, long);
663 WINSOCK_API_LINKAGE BOOL WINAPI WSAGetOverlappedResult (SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD);
664 WINSOCK_API_LINKAGE BOOL WINAPI WSAGetQOSByName (SOCKET, LPWSABUF, LPQOS);
665
666 #define WSAGetServiceClassInfo __AW_SUFFIXED__(WSAGetServiceClassInfo)
667 WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassInfoA (LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA);
668 WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassInfoW (LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW);
669
670 #define WSAGetServiceClassNameByClassId __AW_SUFFIXED__(WSAGetServiceClassNameByClassId)
671 WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassNameByClassIdA (LPGUID, LPSTR, LPDWORD);
672 WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassNameByClassIdW (LPGUID, LPWSTR, LPDWORD);
673
674 WINSOCK_API_LINKAGE int WINAPI WSAHtonl (SOCKET, unsigned long, unsigned long *);
675 WINSOCK_API_LINKAGE int WINAPI WSAHtons (SOCKET, unsigned short, unsigned short *);
676
677 #define WSAInstallServiceClass __AW_SUFFIXED__(WSAInstallServiceClass)
678 WINSOCK_API_LINKAGE INT WINAPI WSAInstallServiceClassA (LPWSASERVICECLASSINFOA);
679 WINSOCK_API_LINKAGE INT WINAPI WSAInstallServiceClassW (LPWSASERVICECLASSINFOW);
680
681 WINSOCK_API_LINKAGE int WINAPI WSAIoctl (SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
682 WINSOCK_API_LINKAGE SOCKET WINAPI WSAJoinLeaf (SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD);
683
684 #define WSALookupServiceBegin __AW_SUFFIXED__(WSALookupServiceBegin)
685 WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceBeginA (LPWSAQUERYSETA, DWORD, LPHANDLE);
686 WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceBeginW (LPWSAQUERYSETW, DWORD, LPHANDLE);
687
688 #define WSALookupServiceNext __AW_SUFFIXED__(WSALookupServiceNext)
689 WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceNextA (HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA);
690 WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceNextW (HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW);
691
692 WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceEnd (HANDLE);
693 WINSOCK_API_LINKAGE int WINAPI WSANSPIoctl (HANDLE, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSACOMPLETION); /* XP or .NET Server */
694 WINSOCK_API_LINKAGE int WINAPI WSANtohl (SOCKET, unsigned long, unsigned long *);
695 WINSOCK_API_LINKAGE int WINAPI WSANtohs (SOCKET, unsigned short, unsigned short *);
696 WINSOCK_API_LINKAGE int WINAPI WSARecv (SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
697 WINSOCK_API_LINKAGE int WINAPI WSARecvDisconnect (SOCKET, LPWSABUF);
698 WINSOCK_API_LINKAGE int WINAPI WSARecvFrom (SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
699 WINSOCK_API_LINKAGE INT WINAPI WSARemoveServiceClass (LPGUID);
700 WINSOCK_API_LINKAGE BOOL WINAPI WSAResetEvent (WSAEVENT);
701 WINSOCK_API_LINKAGE int WINAPI WSASend (SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
702 WINSOCK_API_LINKAGE int WINAPI WSASendDisconnect (SOCKET, LPWSABUF);
703 WINSOCK_API_LINKAGE int WINAPI WSASendTo (SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
704 WINSOCK_API_LINKAGE BOOL WINAPI WSASetEvent (WSAEVENT);
705
706 #define WSASetService __AW_SUFFIXED__(WSASetService)
707 WINSOCK_API_LINKAGE INT WSAAPI WSASetServiceA (LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD);
708 WINSOCK_API_LINKAGE INT WINAPI WSASetServiceW (LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD);
709
710 #define WSASocket __AW_SUFFIXED__(WSASocket)
711 WINSOCK_API_LINKAGE SOCKET WINAPI WSASocketA (int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD);
712 WINSOCK_API_LINKAGE SOCKET WINAPI WSASocketW (int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD);
713
714 #define WSAStringToAddress __AW_SUFFIXED__(WSAStringToAddress)
715 WINSOCK_API_LINKAGE INT WINAPI WSAStringToAddressA (LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT);
716 WINSOCK_API_LINKAGE INT WINAPI WSAStringToAddressW (LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT);
717
718 WINSOCK_API_LINKAGE DWORD WINAPI WSAWaitForMultipleEvents (DWORD, const WSAEVENT *, BOOL, DWORD, BOOL);
719
720 typedef SOCKET (WINAPI *LPFN_WSAACCEPT) (SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD);
721
722 #define LPFN_WSAADDRESSTOSTRING __AW_SUFFIXED__(LPFN_WSAADDRESSTOSTRING)
723 typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGA) (LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD);
724 typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGW) (LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD);
725
726 typedef BOOL (WINAPI *LPFN_WSACLOSEEVENT) (WSAEVENT);
727 typedef int (WINAPI *LPFN_WSACONNECT) (SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS);
728 typedef WSAEVENT (WINAPI *LPFN_WSACREATEEVENT) (void);
729
730 #define LPFN_WSADUPLICATESOCKET __AW_SUFFIXED__(LPFN_WSADUPLICATESOCKET)
731 typedef int (WINAPI *LPFN_WSADUPLICATESOCKETA) (SOCKET, DWORD, LPWSAPROTOCOL_INFOA);
732 typedef int (WINAPI *LPFN_WSADUPLICATESOCKETW) (SOCKET, DWORD, LPWSAPROTOCOL_INFOW);
733
734 #define LPFN_WSAENUMNAMESPACEPROVIDERS __AW_SUFFIXED__(LPFN_WSAENUMNAMESPACEPROVIDERS)
735 typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSA) (LPDWORD, LPWSANAMESPACE_INFOA);
736 typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSW) (LPDWORD, LPWSANAMESPACE_INFOW);
737
738 typedef int (WINAPI *LPFN_WSAENUMNETWORKEVENTS) (SOCKET, WSAEVENT, LPWSANETWORKEVENTS);
739
740 #define LPFN_WSAENUMPROTOCOLS __AW_SUFFIXED__(LPFN_WSAENUMPROTOCOLS)
741 typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSA) (LPINT, LPWSAPROTOCOL_INFOA, LPDWORD);
742 typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSW) (LPINT, LPWSAPROTOCOL_INFOW, LPDWORD);
743
744 typedef int (WINAPI *LPFN_WSAEVENTSELECT) (SOCKET, WSAEVENT, long);
745 typedef BOOL (WINAPI *LPFN_WSAGETOVERLAPPEDRESULT) (SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD);
746 typedef BOOL (WINAPI *LPFN_WSAGETQOSBYNAME) (SOCKET, LPWSABUF, LPQOS);
747
748 #define LPFN_WSAGETSERVICECLASSINFO __AW_SUFFIXED__(LPFN_WSAGETSERVICECLASSINFO)
749 typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOA) (LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA);
750 typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOW) (LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW);
751
752 #define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID __AW_SUFFIXED__(LPFN_WSAGETSERVICECLASSNAMEBYCLASSID)
753 typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA) (LPGUID, LPSTR, LPDWORD);
754 typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW) (LPGUID, LPWSTR, LPDWORD);
755
756 typedef int (WINAPI *LPFN_WSAHTONL) (SOCKET, unsigned long, unsigned long *);
757 typedef int (WINAPI *LPFN_WSAHTONS) (SOCKET, unsigned short, unsigned short *);
758
759 #define LPFN_WSAINSTALLSERVICECLASS __AW_SUFFIXED__(LPFN_WSAINSTALLSERVICECLASS)
760 typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSA) (LPWSASERVICECLASSINFOA);
761 typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSW) (LPWSASERVICECLASSINFOW);
762
763 typedef int (WINAPI *LPFN_WSAIOCTL) (SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
764 typedef SOCKET (WINAPI *LPFN_WSAJOINLEAF) (SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD);
765
766 #define LPFN_WSALOOKUPSERVICEBEGIN __AW_SUFFIXED__(LPFN_WSALOOKUPSERVICEBEGIN)
767 typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINA) (LPWSAQUERYSETA, DWORD, LPHANDLE);
768 typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINW) (LPWSAQUERYSETW, DWORD, LPHANDLE);
769
770 #define LPFN_WSALOOKUPSERVICENEXT __AW_SUFFIXED__(LPFN_WSALOOKUPSERVICENEXT)
771 typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTA) (HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA);
772 typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTW) (HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW);
773
774 typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEEND) (HANDLE);
775 typedef int (WINAPI *LPFN_WSANSPIoctl) (HANDLE, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSACOMPLETION);
776 typedef int (WINAPI *LPFN_WSANTOHL) (SOCKET, unsigned long, unsigned long *);
777 typedef int (WINAPI *LPFN_WSANTOHS) (SOCKET, unsigned short, unsigned short *);
778 typedef int (WINAPI *LPFN_WSARECV) (SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
779 typedef int (WINAPI *LPFN_WSARECVDISCONNECT) (SOCKET, LPWSABUF);
780 typedef int (WINAPI *LPFN_WSARECVFROM) (SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
781 typedef INT (WINAPI *LPFN_WSAREMOVESERVICECLASS) (LPGUID);
782 typedef BOOL (WINAPI *LPFN_WSARESETEVENT) (WSAEVENT);
783 typedef int (WINAPI *LPFN_WSASEND) (SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
784 typedef int (WINAPI *LPFN_WSASENDDISCONNECT) (SOCKET, LPWSABUF);
785 typedef int (WINAPI *LPFN_WSASENDTO) (SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
786 typedef BOOL (WINAPI *LPFN_WSASETEVENT) (WSAEVENT);
787
788 #define LPFN_WSASETSERVICE  __AW_SUFFIXED__(LPFN_WSASETSERVICE)
789 typedef INT (WINAPI *LPFN_WSASETSERVICEA) (LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD);
790 typedef INT (WINAPI *LPFN_WSASETSERVICEW) (LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD);
791
792 #define LPFN_WSASOCKET __AW_SUFFIXED__(LPFN_WSASOCKET)
793 typedef SOCKET (WINAPI *LPFN_WSASOCKETA) (int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD);
794 typedef SOCKET (WINAPI *LPFN_WSASOCKETW) (int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD);
795
796 #define LPFN_WSASTRINGTOADDRESS __AW_SUFFIXED__(LPFN_WSASTRINGTOADDRESS)
797 typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSA) (LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT);
798 typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSW) (LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT);
799
800 typedef DWORD (WINAPI *LPFN_WSAWAITFORMULTIPLEEVENTS) (DWORD, const WSAEVENT *, BOOL, DWORD, BOOL);
801
802 _END_C_DECLS
803
804 #undef __WINSOCK2_H_SOURCED__
805 #endif  /* !_WINSOCK_H included prematurely */
806 #endif  /* _WINSOCK2_H: $RCSfile$: end of file */