Add .gitattributes and .gitignore files and normalize line endings in the repository...
[reactos.git] / sdk / include / psdk / ws2def.h
1 #pragma once
2
3 #define _WS2DEF_
4
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8
9 #if !defined(_WINSOCK2API_) && defined(_WINSOCKAPI_)
10 #error Include only winsock2.h, not both winsock.h and ws2def.h in the same module.
11 #endif
12
13 #if (_WIN32_WINNT >= 0x0600)
14
15 #ifdef _MSC_VER
16 #define WS2DEF_INLINE __inline
17 #else
18 #define WS2DEF_INLINE extern inline
19 #endif
20
21 #endif/* (_WIN32_WINNT >= 0x0600) */
22
23 #include <inaddr.h>
24
25 typedef USHORT ADDRESS_FAMILY;
26
27 #define AF_UNSPEC 0
28 #define AF_UNIX 1
29 #define AF_INET 2
30 #define AF_IMPLINK 3
31 #define AF_PUP 4
32 #define AF_CHAOS 5
33 #define AF_NS 6
34 #define AF_IPX AF_NS
35 #define AF_ISO 7
36 #define AF_OSI AF_ISO
37 #define AF_ECMA 8
38 #define AF_DATAKIT 9
39 #define AF_CCITT 10
40 #define AF_SNA 11
41 #define AF_DECnet 12
42 #define AF_DLI 13
43 #define AF_LAT 14
44 #define AF_HYLINK 15
45 #define AF_APPLETALK 16
46 #define AF_NETBIOS 17
47 #define AF_VOICEVIEW 18
48 #define AF_FIREFOX 19
49 #define AF_UNKNOWN1 20
50 #define AF_BAN 21
51 #define AF_ATM 22
52 #define AF_INET6 23
53 #define AF_CLUSTER 24
54 #define AF_12844 25
55 #define AF_IRDA 26
56 #define AF_NETDES 28
57
58 #if (_WIN32_WINNT < 0x0501)
59
60 #define AF_MAX 29
61
62 #else
63
64 #define AF_TCNPROCESS 29
65 #define AF_TCNMESSAGE 30
66 #define AF_ICLFXBM 31
67
68 #if(_WIN32_WINNT < 0x0600)
69
70 #define AF_MAX 32
71
72 #else
73
74 #define AF_BTH 32
75 #if (_WIN32_WINNT < 0x0601)
76 #define AF_MAX 33
77 #else
78 #define AF_LINK 33
79 #define AF_MAX 34
80 #endif /* (_WIN32_WINNT < 0x0601) */
81
82 #endif /* (_WIN32_WINNT < 0x0600) */
83
84 #endif /* (_WIN32_WINNT < 0x0501) */
85
86 #define SOCK_STREAM 1
87 #define SOCK_DGRAM 2
88 #define SOCK_RAW 3
89 #define SOCK_RDM 4
90 #define SOCK_SEQPACKET 5
91
92 #define SOL_SOCKET 0xffff
93
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
103
104 #define SO_DONTLINGER (int)(~SO_LINGER)
105 #define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR))
106
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
116
117 #define SO_GROUP_ID 0x2001
118 #define SO_GROUP_PRIORITY 0x2002
119 #define SO_MAX_MSG_SIZE 0x2003
120
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
127 #endif /* (_WIN32_WINNT >= 0x0600) */
128
129 #define WSK_SO_BASE 0x4000
130
131 #define TCP_NODELAY 0x0001
132
133 #define _SS_MAXSIZE 128
134 #define _SS_ALIGNSIZE (sizeof(__int64))
135
136 #if (_WIN32_WINNT >= 0x0600)
137
138 #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(USHORT))
139 #define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof(USHORT) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
140
141 #else
142
143 #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (short))
144 #define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (short) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
145
146 #endif /* (_WIN32_WINNT >= 0x0600) */
147
148 #define IOC_UNIX 0x00000000
149 #define IOC_WS2 0x08000000
150 #define IOC_PROTOCOL 0x10000000
151 #define IOC_VENDOR 0x18000000
152
153 #if (_WIN32_WINNT >= 0x0600)
154 #define IOC_WSK (IOC_WS2|0x07000000)
155 #endif
156
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))
161
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)
180
181 #if(_WIN32_WINNT >= 0x0501)
182 #define SIO_ADDRESS_LIST_SORT _WSAIORW(IOC_WS2,25)
183 #endif
184
185 #if (_WIN32_WINNT >= 0x0600)
186 #define SIO_RESERVED_1 _WSAIOW(IOC_WS2,26)
187 #define SIO_RESERVED_2 _WSAIOW(IOC_WS2,33)
188 #endif
189
190 #define IPPROTO_IP 0
191
192 #define IPPORT_TCPMUX 1
193 #define IPPORT_ECHO 7
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
199 #define IPPORT_MSP 18
200 #define IPPORT_CHARGEN 19
201 #define IPPORT_FTP_DATA 20
202 #define IPPORT_FTP 21
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
208 #define IPPORT_MTP 57
209
210 #define IPPORT_TFTP 69
211 #define IPPORT_RJE 77
212 #define IPPORT_FINGER 79
213 #define IPPORT_TTYLINK 87
214 #define IPPORT_SUPDUP 95
215
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
233
234 #define IPPORT_BIFFUDP 512
235 #define IPPORT_WHOSERVER 513
236 #define IPPORT_ROUTESERVER 520
237 #define IPPORT_RESERVED 1024
238
239 #if (_WIN32_WINNT >= 0x0600)
240
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
245
246 #endif /* (_WIN32_WINNT >= 0x0600) */
247
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
253
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
259
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
264
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)
270
271 #define INADDR_ANY (ULONG)0x00000000
272 #define INADDR_LOOPBACK 0x7f000001
273 #define INADDR_BROADCAST (ULONG)0xffffffff
274 #define INADDR_NONE 0xffffffff
275
276 #define SCOPEID_UNSPECIFIED_INIT {0}
277
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)
283
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))
287
288 #define MSG_TRUNC 0x0100
289 #define MSG_CTRUNC 0x0200
290 #define MSG_BCAST 0x0400
291 #define MSG_MCAST 0x0800
292
293 #define AI_PASSIVE 0x00000001
294 #define AI_CANONNAME 0x00000002
295 #define AI_NUMERICHOST 0x00000004
296 #define AI_NUMERICSERV 0x00000008
297
298 #define AI_ALL 0x00000100
299 #define AI_ADDRCONFIG 0x00000400
300 #define AI_V4MAPPED 0x00000800
301
302 #define AI_NON_AUTHORITATIVE 0x00004000
303 #define AI_SECURE 0x00008000
304 #define AI_RETURN_PREFERRED_NAMES 0x00010000
305
306 #define AI_FQDN 0x00020000
307 #define AI_FILESERVER 0x00040000
308
309 #define AI_DISABLE_IDN_ENCODING 0x00080000
310
311 #define NS_ALL 0
312
313 #define NS_SAP 1
314 #define NS_NDS 2
315 #define NS_PEER_BROWSE 3
316 #define NS_SLP 5
317 #define NS_DHCP 6
318
319 #define NS_TCPIP_LOCAL 10
320 #define NS_TCPIP_HOSTS 11
321 #define NS_DNS 12
322 #define NS_NETBT 13
323 #define NS_WINS 14
324
325 #if(_WIN32_WINNT >= 0x0501)
326 #define NS_NLA 15
327 #endif
328
329 #if(_WIN32_WINNT >= 0x0600)
330 #define NS_BTH 16
331 #endif
332
333 #define NS_NBP 20
334
335 #define NS_MS 30
336 #define NS_STDA 31
337 #define NS_NTDS 32
338
339 #if(_WIN32_WINNT >= 0x0600)
340 #define NS_EMAIL 37
341 #define NS_PNRPNAME 38
342 #define NS_PNRPCLOUD 39
343 #endif
344
345 #define NS_X500 40
346 #define NS_NIS 41
347 #define NS_NISPLUS 42
348
349 #define NS_WRQ 50
350
351 #define NS_NETDES 60
352
353 #define NI_NOFQDN 0x01
354 #define NI_NUMERICHOST 0x02
355 #define NI_NAMEREQD 0x04
356 #define NI_NUMERICSERV 0x08
357 #define NI_DGRAM 0x10
358
359 #define NI_MAXHOST 1025
360 #define NI_MAXSERV 32
361
362 typedef struct sockaddr {
363 #if (_WIN32_WINNT < 0x0600)
364 u_short sa_family;
365 #else
366 ADDRESS_FAMILY sa_family;
367 #endif
368 CHAR sa_data[14];
369 } SOCKADDR, *PSOCKADDR, FAR *LPSOCKADDR;
370
371 #ifndef __CSADDR_DEFINED__
372 #define __CSADDR_DEFINED__
373
374 typedef struct _SOCKET_ADDRESS {
375 LPSOCKADDR lpSockaddr;
376 INT iSockaddrLength;
377 } SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS;
378
379 typedef struct _SOCKET_ADDRESS_LIST {
380 INT iAddressCount;
381 SOCKET_ADDRESS Address[1];
382 } SOCKET_ADDRESS_LIST, *PSOCKET_ADDRESS_LIST, FAR *LPSOCKET_ADDRESS_LIST;
383
384 #if (_WIN32_WINNT >= 0x0600)
385 #define SIZEOF_SOCKET_ADDRESS_LIST(AddressCount) \
386 (FIELD_OFFSET(SOCKET_ADDRESS_LIST, Address) + \
387 AddressCount * sizeof(SOCKET_ADDRESS))
388 #endif
389
390 typedef struct _CSADDR_INFO {
391 SOCKET_ADDRESS LocalAddr;
392 SOCKET_ADDRESS RemoteAddr;
393 INT iSocketType;
394 INT iProtocol;
395 } CSADDR_INFO, *PCSADDR_INFO, FAR *LPCSADDR_INFO ;
396
397 #endif /* __CSADDR_DEFINED__ */
398
399 typedef struct sockaddr_storage {
400 ADDRESS_FAMILY ss_family;
401 CHAR __ss_pad1[_SS_PAD1SIZE];
402 __int64 __ss_align;
403 CHAR __ss_pad2[_SS_PAD2SIZE];
404 } SOCKADDR_STORAGE_LH, *PSOCKADDR_STORAGE_LH, FAR *LPSOCKADDR_STORAGE_LH;
405
406 typedef struct sockaddr_storage_xp {
407 short ss_family;
408 CHAR __ss_pad1[_SS_PAD1SIZE];
409 __int64 __ss_align;
410 CHAR __ss_pad2[_SS_PAD2SIZE];
411 } SOCKADDR_STORAGE_XP, *PSOCKADDR_STORAGE_XP, FAR *LPSOCKADDR_STORAGE_XP;
412
413 #if (_WIN32_WINNT >= 0x0600)
414
415 typedef SOCKADDR_STORAGE_LH SOCKADDR_STORAGE;
416 typedef SOCKADDR_STORAGE *PSOCKADDR_STORAGE, FAR *LPSOCKADDR_STORAGE;
417
418 #elif (_WIN32_WINNT >= 0x0501)
419
420 typedef SOCKADDR_STORAGE_XP SOCKADDR_STORAGE;
421 typedef SOCKADDR_STORAGE *PSOCKADDR_STORAGE, FAR *LPSOCKADDR_STORAGE;
422
423 #endif /* (_WIN32_WINNT >= 0x0600) */
424
425 typedef enum {
426 #if (_WIN32_WINNT >= 0x0501)
427 IPPROTO_HOPOPTS = 0,
428 #endif
429 IPPROTO_ICMP = 1,
430 IPPROTO_IGMP = 2,
431 IPPROTO_GGP = 3,
432 #if (_WIN32_WINNT >= 0x0501)
433 IPPROTO_IPV4 = 4,
434 #endif
435 #if (_WIN32_WINNT >= 0x0600)
436 IPPROTO_ST = 5,
437 #endif
438 IPPROTO_TCP = 6,
439 #if (_WIN32_WINNT >= 0x0600)
440 IPPROTO_CBT = 7,
441 IPPROTO_EGP = 8,
442 IPPROTO_IGP = 9,
443 #endif
444 IPPROTO_PUP = 12,
445 IPPROTO_UDP = 17,
446 IPPROTO_IDP = 22,
447 #if (_WIN32_WINNT >= 0x0600)
448 IPPROTO_RDP = 27,
449 #endif
450 #if (_WIN32_WINNT >= 0x0501)
451 IPPROTO_IPV6 = 41,
452 IPPROTO_ROUTING = 43,
453 IPPROTO_FRAGMENT = 44,
454 IPPROTO_ESP = 50,
455 IPPROTO_AH = 51,
456 IPPROTO_ICMPV6 = 58,
457 IPPROTO_NONE = 59,
458 IPPROTO_DSTOPTS = 60,
459 #endif /* (_WIN32_WINNT >= 0x0501) */
460 IPPROTO_ND = 77,
461 #if(_WIN32_WINNT >= 0x0501)
462 IPPROTO_ICLFXBM = 78,
463 #endif
464 #if (_WIN32_WINNT >= 0x0600)
465 IPPROTO_PIM = 103,
466 IPPROTO_PGM = 113,
467 IPPROTO_L2TP = 115,
468 IPPROTO_SCTP = 132,
469 #endif /* (_WIN32_WINNT >= 0x0600) */
470 IPPROTO_RAW = 255,
471 IPPROTO_MAX = 256,
472 IPPROTO_RESERVED_RAW = 257,
473 IPPROTO_RESERVED_IPSEC = 258,
474 IPPROTO_RESERVED_IPSECOFFLOAD = 259,
475 IPPROTO_RESERVED_MAX = 260
476 } IPPROTO, *PIPROTO;
477
478 typedef enum {
479 ScopeLevelInterface = 1,
480 ScopeLevelLink = 2,
481 ScopeLevelSubnet = 3,
482 ScopeLevelAdmin = 4,
483 ScopeLevelSite = 5,
484 ScopeLevelOrganization = 8,
485 ScopeLevelGlobal = 14,
486 ScopeLevelCount = 16
487 } SCOPE_LEVEL;
488
489 typedef struct {
490 union {
491 struct {
492 ULONG Zone:28;
493 ULONG Level:4;
494 };
495 ULONG Value;
496 };
497 } SCOPE_ID, *PSCOPE_ID;
498
499 typedef struct sockaddr_in {
500 #if(_WIN32_WINNT < 0x0600)
501 short sin_family;
502 #else
503 ADDRESS_FAMILY sin_family;
504 #endif
505 USHORT sin_port;
506 IN_ADDR sin_addr;
507 CHAR sin_zero[8];
508 } SOCKADDR_IN, *PSOCKADDR_IN;
509
510 #if(_WIN32_WINNT >= 0x0601)
511 typedef struct sockaddr_dl {
512 ADDRESS_FAMILY sdl_family;
513 UCHAR sdl_data[8];
514 UCHAR sdl_zero[4];
515 } SOCKADDR_DL, *PSOCKADDR_DL;
516 #endif
517
518 typedef struct _WSABUF {
519 ULONG len;
520 CHAR FAR *buf;
521 } WSABUF, FAR * LPWSABUF;
522
523 typedef struct _WSAMSG {
524 LPSOCKADDR name;
525 INT namelen;
526 LPWSABUF lpBuffers;
527 #if (_WIN32_WINNT >= 0x0600)
528 ULONG dwBufferCount;
529 #else
530 DWORD dwBufferCount;
531 #endif
532 WSABUF Control;
533 #if (_WIN32_WINNT >= 0x0600)
534 ULONG dwFlags;
535 #else
536 DWORD dwFlags;
537 #endif
538 } WSAMSG, *PWSAMSG, *FAR LPWSAMSG;
539
540 #if (_WIN32_WINNT >= 0x0600)
541 #define _WSACMSGHDR cmsghdr
542 #endif
543
544 typedef struct _WSACMSGHDR {
545 SIZE_T cmsg_len;
546 INT cmsg_level;
547 INT cmsg_type;
548 } WSACMSGHDR, *PWSACMSGHDR, FAR *LPWSACMSGHDR;
549
550 #if (_WIN32_WINNT >= 0x0600)
551 typedef WSACMSGHDR CMSGHDR, *PCMSGHDR;
552 #endif
553
554 #define WSA_CMSGHDR_ALIGN(length) (((length) + TYPE_ALIGNMENT(WSACMSGHDR)-1) & \
555 (~(TYPE_ALIGNMENT(WSACMSGHDR)-1)))
556
557 #define WSA_CMSGDATA_ALIGN(length) (((length) + MAX_NATURAL_ALIGNMENT-1) & \
558 (~(MAX_NATURAL_ALIGNMENT-1)))
559
560 #if(_WIN32_WINNT >= 0x0600)
561 #define CMSGHDR_ALIGN WSA_CMSGHDR_ALIGN
562 #define CMSGDATA_ALIGN WSA_CMSGDATA_ALIGN
563 #endif
564
565 /*
566 * WSA_CMSG_FIRSTHDR
567 *
568 * Returns a pointer to the first ancillary data object,
569 * or a null pointer if there is no ancillary data in the
570 * control buffer of the WSAMSG structure.
571 *
572 * LPCMSGHDR
573 * WSA_CMSG_FIRSTHDR (
574 * LPWSAMSG msg
575 * );
576 */
577 #define WSA_CMSG_FIRSTHDR(msg) (((msg)->Control.len >= sizeof(WSACMSGHDR)) \
578 ? (LPWSACMSGHDR)(msg)->Control.buf \
579 : (LPWSACMSGHDR)NULL)
580
581 #if(_WIN32_WINNT >= 0x0600)
582 #define CMSG_FIRSTHDR WSA_CMSG_FIRSTHDR
583 #endif
584
585 /*
586 * WSA_CMSG_NXTHDR
587 *
588 * Returns a pointer to the next ancillary data object,
589 * or a null if there are no more data objects.
590 *
591 * LPCMSGHDR
592 * WSA_CMSG_NEXTHDR (
593 * LPWSAMSG msg,
594 * LPWSACMSGHDR cmsg
595 * );
596 */
597 #define WSA_CMSG_NXTHDR(msg, cmsg) \
598 ( ((cmsg) == NULL) \
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)) ) )
608
609 #if(_WIN32_WINNT >= 0x0600)
610 #define CMSG_NXTHDR WSA_CMSG_NXTHDR
611 #endif
612
613 /*
614 * WSA_CMSG_DATA
615 *
616 * Returns a pointer to the first byte of data (what is referred
617 * to as the cmsg_data member though it is not defined in
618 * the structure).
619 *
620 * Note that RFC 2292 defines this as CMSG_DATA, but that name
621 * is already used by wincrypt.h, and so Windows has used WSA_CMSG_DATA.
622 *
623 * PUCHAR
624 * WSA_CMSG_DATA (
625 * LPWSACMSGHDR pcmsg
626 * );
627 */
628 #define WSA_CMSG_DATA(cmsg) ((PUCHAR)(cmsg) + WSA_CMSGDATA_ALIGN(sizeof(WSACMSGHDR)))
629
630 /*
631 * WSA_CMSG_SPACE
632 *
633 * Returns total size of an ancillary data object given
634 * the amount of data. Used to allocate the correct amount
635 * of space.
636 *
637 * SIZE_T
638 * WSA_CMSG_SPACE (
639 * SIZE_T length
640 * );
641 */
642 #define WSA_CMSG_SPACE(length) (WSA_CMSGDATA_ALIGN(sizeof(WSACMSGHDR) + WSA_CMSGHDR_ALIGN(length)))
643
644 #if(_WIN32_WINNT >= 0x0600)
645 #define CMSG_SPACE WSA_CMSG_SPACE
646 #endif
647
648 /*
649 * WSA_CMSG_LEN
650 *
651 * Returns the value to store in cmsg_len given the amount of data.
652 *
653 * SIZE_T
654 * WSA_CMSG_LEN (
655 * SIZE_T length
656 * );
657 */
658 #define WSA_CMSG_LEN(length) (WSA_CMSGDATA_ALIGN(sizeof(WSACMSGHDR)) + length)
659
660 #if(_WIN32_WINNT >= 0x0600)
661 #define CMSG_LEN WSA_CMSG_LEN
662 #endif
663
664 typedef struct addrinfo {
665 int ai_flags;
666 int ai_family;
667 int ai_socktype;
668 int ai_protocol;
669 size_t ai_addrlen;
670 char *ai_canonname;
671 struct sockaddr *ai_addr;
672 struct addrinfo *ai_next;
673 } ADDRINFOA, *PADDRINFOA;
674
675 typedef struct addrinfoW {
676 int ai_flags;
677 int ai_family;
678 int ai_socktype;
679 int ai_protocol;
680 size_t ai_addrlen;
681 PWSTR ai_canonname;
682 struct sockaddr *ai_addr;
683 struct addrinfoW *ai_next;
684 } ADDRINFOW, *PADDRINFOW;
685
686 #if (_WIN32_WINNT >= 0x0600)
687
688 typedef struct addrinfoexA {
689 int ai_flags;
690 int ai_family;
691 int ai_socktype;
692 int ai_protocol;
693 size_t ai_addrlen;
694 char *ai_canonname;
695 struct sockaddr *ai_addr;
696 void *ai_blob;
697 size_t ai_bloblen;
698 LPGUID ai_provider;
699 struct addrinfoexA *ai_next;
700 } ADDRINFOEXA, *PADDRINFOEXA, *LPADDRINFOEXA;
701
702 typedef struct addrinfoexW {
703 int ai_flags;
704 int ai_family;
705 int ai_socktype;
706 int ai_protocol;
707 size_t ai_addrlen;
708 PWSTR ai_canonname;
709 struct sockaddr *ai_addr;
710 void *ai_blob;
711 size_t ai_bloblen;
712 LPGUID ai_provider;
713 struct addrinfoexW *ai_next;
714 } ADDRINFOEXW, *PADDRINFOEXW, *LPADDRINFOEXW;
715
716 #endif /* (_WIN32_WINNT >= 0x0600) */
717
718 #ifdef __cplusplus
719 }
720 #endif