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.
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
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:
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
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.
35 * Portions Copyright (C) 1980, 1983, 1988, 1993
36 * The Regents of the University of California. All rights reserved.
38 * Portions Copyright (C) 1993 by Digital Equipment Corporation.
42 #pragma GCC system_header
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>
50 #undef __USE_MINGW_WINSOCK_DEFAULT
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.
56 #error "Including <winsock2.h> after <winsock.h> is unsupported."
57 #warning "Falling back to WinSock v1.1 protocol."
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.
68 #define __WINSOCK2_DEPRECATED __MINGW_ATTRIB_DEPRECATED
71 #define __WINSOCK2_H_SOURCED__
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"
83 #define ADDR_ANY INADDR_ANY
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)
91 #define FROM_PROTOCOL_INFO (-1)
93 #define SO_GROUP_ID 0x2001
94 #define SO_GROUP_PRIORITY 0x2002
95 #define SO_MAX_MSG_SIZE 0x2003
97 #define SO_PROTOCOL_INFO __AW_SUFFIXED__(SO_PROTOCOL_INFO)
98 #define SO_PROTOCOL_INFOA 0x2004
99 #define SO_PROTOCOL_INFOW 0x2005
101 #define PVD_CONFIG 0x3001
103 #define MSG_INTERRUPT 0x10
105 #define WSAAPI WINAPI
106 #define WSAEVENT HANDLE
107 #define LPWSAEVENT LPHANDLE
108 #define WSAOVERLAPPED OVERLAPPED
110 typedef struct _OVERLAPPED *LPWSAOVERLAPPED;
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)
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)
135 ControlledLoadService,
137 GuaranteedDelayService,
141 /* IPv6 protocol options: these are additional to protocol option constants
142 * already defined in <winsock.h>; they are unsupported prior to WinSock v2.
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 */
154 /* Address family definitions: these extend the set which has been defined
155 * already, in <winsock.h>; they are applicable only for WinSock v2.
157 #define AF_CLUSTER 24
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.
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.
174 * Desired design maximum size and alignment.
176 #define _SS_MAXSIZE 128
177 #define _SS_ALIGNSIZE sizeof(__int64)
179 /* Definitions used for sockaddr_storage structure padding.
181 #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(short))
182 #define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof(short) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
184 struct sockaddr_storage
186 char __ss_pad1[_SS_PAD1SIZE]; /* pad to 8 */
187 __int64 __ss_align; /* force alignment */
188 char __ss_pad2[_SS_PAD2SIZE]; /* pad to 128 */
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.
197 #define SOMAXCONN 0x7FFFFFFF
199 /* SO_EXCLUSIVEADDRUSE is not applicable, prior to WinSock v2; it is
200 * derived from SO_REUSEADDR, which has been defined in <winsock.h>
202 #define SO_EXCLUSIVEADDRUSE ((u_int)(~SO_REUSEADDR))
203 #endif /* !__INSIDE_MSYS__ */
205 /* FIXME: FLOWSPEC and related definitions belong in qos.h */
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.
213 typedef unsigned int SERVICETYPE;
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;
228 struct _QualityOfService
229 { FLOWSPEC SendingFlowspec;
230 FLOWSPEC ReceivingFlowspec;
231 WSABUF ProviderSpecific;
234 #define CF_ACCEPT 0x0000
235 #define CF_REJECT 0x0001
236 #define CF_DEFER 0x0002
238 typedef unsigned int GROUP;
240 #define SG_UNCONSTRAINED_GROUP 0x01
241 #define SG_CONSTRAINED_GROUP 0x02
244 struct _WSANETWORKEVENTS
245 { long lNetworkEvents;
246 int iErrorCode[FD_MAX_EVENTS];
247 } WSANETWORKEVENTS, *LPWSANETWORKEVENTS;
249 #define MAX_PROTOCOL_CHAIN 7
251 #define BASE_PROTOCOL 1
252 #define LAYERED_PROTOCOL 0
255 enum _WSAESETSERVICEOP
256 { RNRSERVICE_REGISTER = 0,
257 RNRSERVICE_DEREGISTER,
259 } WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
263 { INT iAddressFamily;
265 } AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
271 } WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
276 WSAECOMPARATOR ecHow;
277 } WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
280 struct _SOCKET_ADDRESS_LIST
282 SOCKET_ADDRESS Address[1];
283 } SOCKET_ADDRESS_LIST, *LPSOCKET_ADDRESS_LIST;
288 LPSTR lpszServiceInstanceName;
289 LPGUID lpServiceClassId;
290 LPWSAVERSION lpVersion;
293 LPGUID lpNSProviderId;
295 DWORD dwNumberOfProtocols;
296 LPAFPROTOCOLS lpafpProtocols;
297 LPSTR lpszQueryString;
298 DWORD dwNumberOfCsAddrs;
299 LPCSADDR_INFO lpcsaBuffer;
302 } WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
307 LPWSTR lpszServiceInstanceName;
308 LPGUID lpServiceClassId;
309 LPWSAVERSION lpVersion;
312 LPGUID lpNSProviderId;
314 DWORD dwNumberOfProtocols;
315 LPAFPROTOCOLS lpafpProtocols;
316 LPWSTR lpszQueryString;
317 DWORD dwNumberOfCsAddrs;
318 LPCSADDR_INFO lpcsaBuffer;
321 } WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
323 typedef __AW_ALIAS__( WSAQUERYSET );
324 typedef __AW_ALIAS__( PWSAQUERYSET );
325 typedef __AW_ALIAS__( LPWSAQUERYSET );
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
345 struct _WSANSClassInfoA
351 } WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
354 struct _WSANSClassInfoW
360 } WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
362 typedef __AW_ALIAS__( WSANSCLASSINFO );
363 typedef __AW_ALIAS__( PWSANSCLASSINFO );
364 typedef __AW_ALIAS__( LPWSANSCLASSINFO );
367 struct _WSAServiceClassInfoA
368 { LPGUID lpServiceClassId;
369 LPSTR lpszServiceClassName;
371 LPWSANSCLASSINFOA lpClassInfos;
372 } WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
375 struct _WSAServiceClassInfoW
376 { LPGUID lpServiceClassId;
377 LPWSTR lpszServiceClassName;
379 LPWSANSCLASSINFOW lpClassInfos;
380 } WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
382 typedef __AW_ALIAS__( WSASERVICECLASSINFO );
383 typedef __AW_ALIAS__( PWSASERVICECLASSINFO );
384 typedef __AW_ALIAS__( LPWSASERVICECLASSINFO );
387 struct _WSANAMESPACE_INFOA
392 LPSTR lpszIdentifier;
393 } WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
396 struct _WSANAMESPACE_INFOW
401 LPWSTR lpszIdentifier;
402 } WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
404 typedef __AW_ALIAS__( WSANAMESPACE_INFO );
405 typedef __AW_ALIAS__( PWSANAMESPACE_INFO );
406 typedef __AW_ALIAS__( LPWSANAMESPACE_INFO );
409 struct _WSAPROTOCOLCHAIN
411 DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
412 } WSAPROTOCOLCHAIN, *LPWSAPROTOCOLCHAIN;
414 #define WSAPROTOCOL_LEN 255
417 struct _WSAPROTOCOL_INFOA
418 { DWORD dwServiceFlags1;
419 DWORD dwServiceFlags2;
420 DWORD dwServiceFlags3;
421 DWORD dwServiceFlags4;
422 DWORD dwProviderFlags;
424 DWORD dwCatalogEntryId;
425 WSAPROTOCOLCHAIN ProtocolChain;
432 int iProtocolMaxOffset;
433 int iNetworkByteOrder;
436 DWORD dwProviderReserved;
437 CHAR szProtocol[WSAPROTOCOL_LEN+1];
438 } WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA;
441 struct _WSAPROTOCOL_INFOW
442 { DWORD dwServiceFlags1;
443 DWORD dwServiceFlags2;
444 DWORD dwServiceFlags3;
445 DWORD dwServiceFlags4;
446 DWORD dwProviderFlags;
448 DWORD dwCatalogEntryId;
449 WSAPROTOCOLCHAIN ProtocolChain;
456 int iProtocolMaxOffset;
457 int iNetworkByteOrder;
460 DWORD dwProviderReserved;
461 WCHAR szProtocol[WSAPROTOCOL_LEN+1];
462 } WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW;
464 typedef __AW_ALIAS__( WSAPROTOCOL_INFO );
465 typedef __AW_ALIAS__( LPWSAPROTOCOL_INFO );
467 typedef int (CALLBACK *LPCONDITIONPROC) (LPWSABUF, LPWSABUF, LPQOS, LPQOS, LPWSABUF, LPWSABUF, GROUP *, DWORD);
468 typedef void (WINAPI *LPWSAOVERLAPPED_COMPLETION_ROUTINE) (DWORD, DWORD, LPWSAOVERLAPPED, DWORD);
470 /* Needed for XP & .NET Server function WSANSPIoctl. */
473 enum _WSACOMPLETIONTYPE
474 { NSP_NOTIFY_IMMEDIATELY = 0,
479 } WSACOMPLETIONTYPE, *PWSACOMPLETIONTYPE, *LPWSACOMPLETIONTYPE;
482 struct _WSACOMPLETION
483 { WSACOMPLETIONTYPE Type;
491 { LPWSAOVERLAPPED lpOverlapped;
494 { LPWSAOVERLAPPED lpOverlapped;
495 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
498 { LPWSAOVERLAPPED lpOverlapped;
503 } WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION;
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
529 #define BIGENDIAN 0x0000
530 #define LITTLEENDIAN 0x0001
532 #define SECURITY_PROTOCOL_NONE 0x0000
533 #define JL_SENDER_ONLY 0x01
534 #define JL_RECEIVER_ONLY 0x02
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
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))
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)
572 #define TH_NETDEV 0x00000001
573 #define TH_TAPI 0x00000002
575 typedef SOCKET (PASCAL *LPFN_ACCEPT) (SOCKET, struct sockaddr *, int *);
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 *);
585 typedef u_long (PASCAL *LPFN_HTONL) (u_long);
586 typedef u_short (PASCAL *LPFN_HTONS) (u_short);
588 typedef unsigned long (PASCAL *LPFN_INET_ADDR) (const char *);
590 typedef char *(PASCAL *LPFN_INET_NTOA) (struct in_addr);
592 typedef int (PASCAL *LPFN_LISTEN) (SOCKET, int);
594 typedef u_long (PASCAL *LPFN_NTOHL) (u_long);
595 typedef u_short (PASCAL *LPFN_NTOHS) (u_short);
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);
605 typedef SOCKET (PASCAL *LPFN_SOCKET) (int, int, int);
607 typedef struct hostent *(PASCAL *LPFN_GETHOSTBYADDR) ( const char *, int, int);
608 typedef struct hostent *(PASCAL *LPFN_GETHOSTBYNAME) ( const char *);
610 typedef int (PASCAL *LPFN_GETHOSTNAME) (char *, int);
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 *);
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);
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);
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);
633 typedef int (PASCAL *LPFN_WSACANCELASYNCREQUEST) (HANDLE);
634 typedef int (PASCAL *LPFN_WSAASYNCSELECT) (SOCKET, HWND, u_int, long);
636 typedef struct sockaddr_storage SOCKADDR_STORAGE, *PSOCKADDR_STORAGE;
638 WINSOCK_API_LINKAGE SOCKET WINAPI WSAAccept (SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD);
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);
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);
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);
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);
656 WINSOCK_API_LINKAGE int WINAPI WSAEnumNetworkEvents (SOCKET, WSAEVENT, LPWSANETWORKEVENTS);
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);
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);
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);
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);
674 WINSOCK_API_LINKAGE int WINAPI WSAHtonl (SOCKET, unsigned long, unsigned long *);
675 WINSOCK_API_LINKAGE int WINAPI WSAHtons (SOCKET, unsigned short, unsigned short *);
677 #define WSAInstallServiceClass __AW_SUFFIXED__(WSAInstallServiceClass)
678 WINSOCK_API_LINKAGE INT WINAPI WSAInstallServiceClassA (LPWSASERVICECLASSINFOA);
679 WINSOCK_API_LINKAGE INT WINAPI WSAInstallServiceClassW (LPWSASERVICECLASSINFOW);
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);
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);
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);
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);
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);
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);
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);
718 WINSOCK_API_LINKAGE DWORD WINAPI WSAWaitForMultipleEvents (DWORD, const WSAEVENT *, BOOL, DWORD, BOOL);
720 typedef SOCKET (WINAPI *LPFN_WSAACCEPT) (SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD);
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);
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);
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);
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);
738 typedef int (WINAPI *LPFN_WSAENUMNETWORKEVENTS) (SOCKET, WSAEVENT, LPWSANETWORKEVENTS);
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);
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);
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);
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);
756 typedef int (WINAPI *LPFN_WSAHTONL) (SOCKET, unsigned long, unsigned long *);
757 typedef int (WINAPI *LPFN_WSAHTONS) (SOCKET, unsigned short, unsigned short *);
759 #define LPFN_WSAINSTALLSERVICECLASS __AW_SUFFIXED__(LPFN_WSAINSTALLSERVICECLASS)
760 typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSA) (LPWSASERVICECLASSINFOA);
761 typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSW) (LPWSASERVICECLASSINFOW);
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);
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);
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);
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);
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);
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);
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);
800 typedef DWORD (WINAPI *LPFN_WSAWAITFORMULTIPLEEVENTS) (DWORD, const WSAEVENT *, BOOL, DWORD, BOOL);
804 #undef __WINSOCK2_H_SOURCED__
805 #endif /* !_WINSOCK_H included prematurely */
806 #endif /* _WINSOCK2_H: $RCSfile$: end of file */