9#if !defined(_WINSOCK2API_) && defined(_WINSOCKAPI_)
10#error Include only winsock2.h, not both winsock.h and ws2def.h in the same module.
13#if (_WIN32_WINNT >= 0x0600)
16#define WS2DEF_INLINE __inline
18#define WS2DEF_INLINE extern inline
45#define AF_APPLETALK 16
47#define AF_VOICEVIEW 18
58#if (_WIN32_WINNT < 0x0501)
64#define AF_TCNPROCESS 29
65#define AF_TCNMESSAGE 30
68#if(_WIN32_WINNT < 0x0600)
75#if (_WIN32_WINNT < 0x0601)
90#define SOCK_SEQPACKET 5
92#define SOL_SOCKET 0xffff
94#define SO_DEBUG 0x0001
95#define SO_ACCEPTCONN 0x0002
96#define SO_REUSEADDR 0x0004
97#define SO_KEEPALIVE 0x0008
98#define SO_DONTROUTE 0x0010
99#define SO_BROADCAST 0x0020
100#define SO_USELOOPBACK 0x0040
101#define SO_LINGER 0x0080
102#define SO_OOBINLINE 0x0100
104#define SO_DONTLINGER (int)(~SO_LINGER)
105#define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR))
107#define SO_SNDBUF 0x1001
108#define SO_RCVBUF 0x1002
109#define SO_SNDLOWAT 0x1003
110#define SO_RCVLOWAT 0x1004
111#define SO_SNDTIMEO 0x1005
112#define SO_RCVTIMEO 0x1006
113#define SO_ERROR 0x1007
114#define SO_TYPE 0x1008
115#define SO_BSP_STATE 0x1009
117#define SO_GROUP_ID 0x2001
118#define SO_GROUP_PRIORITY 0x2002
119#define SO_MAX_MSG_SIZE 0x2003
121#define SO_CONDITIONAL_ACCEPT 0x3002
122#define SO_PAUSE_ACCEPT 0x3003
123#define SO_COMPARTMENT_ID 0x3004
124#if (_WIN32_WINNT >= 0x0600)
125#define SO_RANDOMIZE_PORT 0x3005
126#define SO_PORT_SCALABILITY 0x3006
129#define WSK_SO_BASE 0x4000
131#define TCP_NODELAY 0x0001
133#define _SS_MAXSIZE 128
134#define _SS_ALIGNSIZE (sizeof(__int64))
136#if (_WIN32_WINNT >= 0x0600)
138#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(USHORT))
139#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof(USHORT) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
143#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (short))
144#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (short) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
148#define IOC_UNIX 0x00000000
149#define IOC_WS2 0x08000000
150#define IOC_PROTOCOL 0x10000000
151#define IOC_VENDOR 0x18000000
153#if (_WIN32_WINNT >= 0x0600)
154#define IOC_WSK (IOC_WS2|0x07000000)
157#define _WSAIO(x,y) (IOC_VOID|(x)|(y))
158#define _WSAIOR(x,y) (IOC_OUT|(x)|(y))
159#define _WSAIOW(x,y) (IOC_IN|(x)|(y))
160#define _WSAIORW(x,y) (IOC_INOUT|(x)|(y))
162#define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1)
163#define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2)
164#define SIO_FIND_ROUTE _WSAIOR(IOC_WS2,3)
165#define SIO_FLUSH _WSAIO(IOC_WS2,4)
166#define SIO_GET_BROADCAST_ADDRESS _WSAIOR(IOC_WS2,5)
167#define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2,6)
168#define SIO_GET_QOS _WSAIORW(IOC_WS2,7)
169#define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2,8)
170#define SIO_MULTIPOINT_LOOPBACK _WSAIOW(IOC_WS2,9)
171#define SIO_MULTICAST_SCOPE _WSAIOW(IOC_WS2,10)
172#define SIO_SET_QOS _WSAIOW(IOC_WS2,11)
173#define SIO_SET_GROUP_QOS _WSAIOW(IOC_WS2,12)
174#define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2,13)
175#define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20)
176#define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21)
177#define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22)
178#define SIO_ADDRESS_LIST_CHANGE _WSAIO(IOC_WS2,23)
179#define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_WS2,24)
181#if(_WIN32_WINNT >= 0x0501)
182#define SIO_ADDRESS_LIST_SORT _WSAIORW(IOC_WS2,25)
185#if (_WIN32_WINNT >= 0x0600)
186#define SIO_RESERVED_1 _WSAIOW(IOC_WS2,26)
187#define SIO_RESERVED_2 _WSAIOW(IOC_WS2,33)
192#define IPPORT_TCPMUX 1
194#define IPPORT_DISCARD 9
195#define IPPORT_SYSTAT 11
196#define IPPORT_DAYTIME 13
197#define IPPORT_NETSTAT 15
198#define IPPORT_QOTD 17
200#define IPPORT_CHARGEN 19
201#define IPPORT_FTP_DATA 20
203#define IPPORT_TELNET 23
204#define IPPORT_SMTP 25
205#define IPPORT_TIMESERVER 37
206#define IPPORT_NAMESERVER 42
207#define IPPORT_WHOIS 43
210#define IPPORT_TFTP 69
212#define IPPORT_FINGER 79
213#define IPPORT_TTYLINK 87
214#define IPPORT_SUPDUP 95
216#define IPPORT_POP3 110
217#define IPPORT_NTP 123
218#define IPPORT_EPMAP 135
219#define IPPORT_NETBIOS_NS 137
220#define IPPORT_NETBIOS_DGM 138
221#define IPPORT_NETBIOS_SSN 139
222#define IPPORT_IMAP 143
223#define IPPORT_SNMP 161
224#define IPPORT_SNMP_TRAP 162
225#define IPPORT_IMAP3 220
226#define IPPORT_LDAP 389
227#define IPPORT_HTTPS 443
228#define IPPORT_MICROSOFT_DS 445
229#define IPPORT_EXECSERVER 512
230#define IPPORT_LOGINSERVER 513
231#define IPPORT_CMDSERVER 514
232#define IPPORT_EFSSERVER 520
234#define IPPORT_BIFFUDP 512
235#define IPPORT_WHOSERVER 513
236#define IPPORT_ROUTESERVER 520
237#define IPPORT_RESERVED 1024
239#if (_WIN32_WINNT >= 0x0600)
241#define IPPORT_REGISTERED_MIN IPPORT_RESERVED
242#define IPPORT_REGISTERED_MAX 0xbfff
243#define IPPORT_DYNAMIC_MIN 0xc000
244#define IPPORT_DYNAMIC_MAX 0xffff
248#define IN_CLASSA(i) (((LONG)(i) & 0x80000000) == 0)
249#define IN_CLASSA_NET 0xff000000
250#define IN_CLASSA_NSHIFT 24
251#define IN_CLASSA_HOST 0x00ffffff
252#define IN_CLASSA_MAX 128
254#define IN_CLASSB(i) (((LONG)(i) & 0xc0000000) == 0x80000000)
255#define IN_CLASSB_NET 0xffff0000
256#define IN_CLASSB_NSHIFT 16
257#define IN_CLASSB_HOST 0x0000ffff
258#define IN_CLASSB_MAX 65536
260#define IN_CLASSC(i) (((LONG)(i) & 0xe0000000) == 0xc0000000)
261#define IN_CLASSC_NET 0xffffff00
262#define IN_CLASSC_NSHIFT 8
263#define IN_CLASSC_HOST 0x000000ff
265#define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000)
266#define IN_CLASSD_NET 0xf0000000
267#define IN_CLASSD_NSHIFT 28
268#define IN_CLASSD_HOST 0x0fffffff
269#define IN_MULTICAST(i) IN_CLASSD(i)
271#define INADDR_ANY (ULONG)0x00000000
272#define INADDR_LOOPBACK 0x7f000001
273#define INADDR_BROADCAST (ULONG)0xffffffff
274#define INADDR_NONE 0xffffffff
276#define SCOPEID_UNSPECIFIED_INIT {0}
278#define IOCPARM_MASK 0x7f
279#define IOC_VOID 0x20000000
280#define IOC_OUT 0x40000000
281#define IOC_IN 0x80000000
282#define IOC_INOUT (IOC_IN|IOC_OUT)
284#define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
285#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
286#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
288#define MSG_TRUNC 0x0100
289#define MSG_CTRUNC 0x0200
290#define MSG_BCAST 0x0400
291#define MSG_MCAST 0x0800
293#define AI_PASSIVE 0x00000001
294#define AI_CANONNAME 0x00000002
295#define AI_NUMERICHOST 0x00000004
296#define AI_NUMERICSERV 0x00000008
298#define AI_ALL 0x00000100
299#define AI_ADDRCONFIG 0x00000400
300#define AI_V4MAPPED 0x00000800
302#define AI_NON_AUTHORITATIVE 0x00004000
303#define AI_SECURE 0x00008000
304#define AI_RETURN_PREFERRED_NAMES 0x00010000
306#define AI_FQDN 0x00020000
307#define AI_FILESERVER 0x00040000
309#define AI_DISABLE_IDN_ENCODING 0x00080000
315#define NS_PEER_BROWSE 3
319#define NS_TCPIP_LOCAL 10
320#define NS_TCPIP_HOSTS 11
325#if(_WIN32_WINNT >= 0x0501)
329#if(_WIN32_WINNT >= 0x0600)
339#if(_WIN32_WINNT >= 0x0600)
341#define NS_PNRPNAME 38
342#define NS_PNRPCLOUD 39
353#define NI_NOFQDN 0x01
354#define NI_NUMERICHOST 0x02
355#define NI_NAMEREQD 0x04
356#define NI_NUMERICSERV 0x08
359#define NI_MAXHOST 1025
363#if (_WIN32_WINNT < 0x0600)
371#ifndef __CSADDR_DEFINED__
372#define __CSADDR_DEFINED__
384#if (_WIN32_WINNT >= 0x0600)
385#define SIZEOF_SOCKET_ADDRESS_LIST(AddressCount) \
386 (FIELD_OFFSET(SOCKET_ADDRESS_LIST, Address) + \
387 AddressCount * sizeof(SOCKET_ADDRESS))
413#if (_WIN32_WINNT >= 0x0600)
416typedef SOCKADDR_STORAGE *PSOCKADDR_STORAGE,
FAR *LPSOCKADDR_STORAGE;
418#elif (_WIN32_WINNT >= 0x0501)
421typedef SOCKADDR_STORAGE *PSOCKADDR_STORAGE,
FAR *LPSOCKADDR_STORAGE;
426#if (_WIN32_WINNT >= 0x0501)
432#if (_WIN32_WINNT >= 0x0501)
435#if (_WIN32_WINNT >= 0x0600)
439#if (_WIN32_WINNT >= 0x0600)
447#if (_WIN32_WINNT >= 0x0600)
450#if (_WIN32_WINNT >= 0x0501)
452 IPPROTO_ROUTING = 43,
453 IPPROTO_FRAGMENT = 44,
458 IPPROTO_DSTOPTS = 60,
461#if(_WIN32_WINNT >= 0x0501)
462 IPPROTO_ICLFXBM = 78,
464#if (_WIN32_WINNT >= 0x0600)
500#if(_WIN32_WINNT < 0x0600)
510#if(_WIN32_WINNT >= 0x0601)
511typedef struct sockaddr_dl {
515} SOCKADDR_DL, *PSOCKADDR_DL;
527#if (_WIN32_WINNT >= 0x0600)
533#if (_WIN32_WINNT >= 0x0600)
540#if (_WIN32_WINNT >= 0x0600)
541#define _WSACMSGHDR cmsghdr
550#if (_WIN32_WINNT >= 0x0600)
554#define WSA_CMSGHDR_ALIGN(length) (((length) + TYPE_ALIGNMENT(WSACMSGHDR)-1) & \
555 (~(TYPE_ALIGNMENT(WSACMSGHDR)-1)))
557#define WSA_CMSGDATA_ALIGN(length) (((length) + MAX_NATURAL_ALIGNMENT-1) & \
558 (~(MAX_NATURAL_ALIGNMENT-1)))
560#if(_WIN32_WINNT >= 0x0600)
561#define CMSGHDR_ALIGN WSA_CMSGHDR_ALIGN
562#define CMSGDATA_ALIGN WSA_CMSGDATA_ALIGN
577#define WSA_CMSG_FIRSTHDR(msg) (((msg)->Control.len >= sizeof(WSACMSGHDR)) \
578 ? (LPWSACMSGHDR)(msg)->Control.buf \
579 : (LPWSACMSGHDR)NULL)
581#if(_WIN32_WINNT >= 0x0600)
582#define CMSG_FIRSTHDR WSA_CMSG_FIRSTHDR
597#define WSA_CMSG_NXTHDR(msg, cmsg) \
599 ? WSA_CMSG_FIRSTHDR(msg) \
600 : ( ( ((PUCHAR)(cmsg) + \
601 WSA_CMSGHDR_ALIGN((cmsg)->cmsg_len) + \
602 sizeof(WSACMSGHDR) ) > \
603 (PUCHAR)((msg)->Control.buf) + \
604 (msg)->Control.len ) \
605 ? (LPWSACMSGHDR)NULL \
606 : (LPWSACMSGHDR)((PUCHAR)(cmsg) + \
607 WSA_CMSGHDR_ALIGN((cmsg)->cmsg_len)) ) )
609#if(_WIN32_WINNT >= 0x0600)
610#define CMSG_NXTHDR WSA_CMSG_NXTHDR
628#define WSA_CMSG_DATA(cmsg) ((PUCHAR)(cmsg) + WSA_CMSGDATA_ALIGN(sizeof(WSACMSGHDR)))
642#define WSA_CMSG_SPACE(length) (WSA_CMSGDATA_ALIGN(sizeof(WSACMSGHDR) + WSA_CMSGHDR_ALIGN(length)))
644#if(_WIN32_WINNT >= 0x0600)
645#define CMSG_SPACE WSA_CMSG_SPACE
658#define WSA_CMSG_LEN(length) (WSA_CMSGDATA_ALIGN(sizeof(WSACMSGHDR)) + length)
660#if(_WIN32_WINNT >= 0x0600)
661#define CMSG_LEN WSA_CMSG_LEN
686#if (_WIN32_WINNT >= 0x0600)
688typedef struct addrinfoexA {
699 struct addrinfoexA *ai_next;
700} ADDRINFOEXA, *PADDRINFOEXA, *LPADDRINFOEXA;
702typedef struct addrinfoexW {
713 struct addrinfoexW *ai_next;
714} ADDRINFOEXW, *PADDRINFOEXW, *LPADDRINFOEXW;
SOCKET_ADDRESS RemoteAddr
SOCKET_ADDRESS Address[1]
struct addrinfoW * ai_next
struct sockaddr * ai_addr
struct sockaddr * ai_addr
struct addrinfo * ai_next
CHAR __ss_pad2[_SS_PAD2SIZE]
CHAR __ss_pad1[_SS_PAD1SIZE]
CHAR __ss_pad1[_SS_PAD1SIZE]
CHAR __ss_pad2[_SS_PAD2SIZE]
struct _CSADDR_INFO * LPCSADDR_INFO
struct sockaddr_storage * LPSOCKADDR_STORAGE_LH
struct _WSABUF * LPWSABUF
struct _WSACMSGHDR * LPWSACMSGHDR
struct sockaddr_in SOCKADDR_IN
struct _SOCKET_ADDRESS SOCKET_ADDRESS
struct sockaddr_storage_xp SOCKADDR_STORAGE_XP
struct addrinfoW ADDRINFOW
struct sockaddr_storage SOCKADDR_STORAGE_LH
struct sockaddr_storage * PSOCKADDR_STORAGE_LH
struct _SOCKET_ADDRESS_LIST * PSOCKET_ADDRESS_LIST
struct sockaddr_storage_xp * PSOCKADDR_STORAGE_XP
struct sockaddr_in * PSOCKADDR_IN
struct _WSACMSGHDR WSACMSGHDR
struct _WSACMSGHDR * PWSACMSGHDR
struct _SOCKET_ADDRESS_LIST * LPSOCKET_ADDRESS_LIST
struct _CSADDR_INFO * PCSADDR_INFO
struct _SOCKET_ADDRESS_LIST SOCKET_ADDRESS_LIST
struct _CSADDR_INFO CSADDR_INFO
struct sockaddr_storage_xp * LPSOCKADDR_STORAGE_XP
struct sockaddr * PSOCKADDR
struct sockaddr * LPSOCKADDR
struct addrinfo ADDRINFOA
struct SCOPE_ID * PSCOPE_ID
@ IPPROTO_RESERVED_IPSECOFFLOAD
struct _SOCKET_ADDRESS * LPSOCKET_ADDRESS
struct _SOCKET_ADDRESS * PSOCKET_ADDRESS
struct addrinfoW * PADDRINFOW
struct addrinfo * PADDRINFOA