Unified · Split
| @@ -0,0 +1,391 @@ | ||
| 1 | +/** | |
| 2 | + * This file has no copyright assigned and is placed in the Public Domain. | |
| 3 | + * This file is part of the w64 mingw-runtime package. | |
| 4 | + * No warranty is given; refer to the file DISCLAIMER within this package. | |
| 5 | + */ | |
| 6 | +#ifndef _WS2TCPIP_H | |
| 7 | +#define _WS2TCPIP_H | |
| 8 | + | |
| 9 | +#if __GNUC__ >=3 | |
| 10 | +#pragma GCC system_header | |
| 11 | +#endif | |
| 12 | + | |
| 13 | +#include <ws2ipdef.h> | |
| 14 | + | |
| 15 | +struct ip_msfilter { | |
| 16 | + struct in_addr imsf_multiaddr; | |
| 17 | + struct in_addr imsf_interface; | |
| 18 | + u_long imsf_fmode; | |
| 19 | + u_long imsf_numsrc; | |
| 20 | + struct in_addr imsf_slist[1]; | |
| 21 | +}; | |
| 22 | + | |
| 23 | +#define IP_MSFILTER_SIZE(numsrc) (sizeof(struct ip_msfilter)-sizeof(struct in_addr) + (numsrc)*sizeof(struct in_addr)) | |
| 24 | + | |
| 25 | +#define MCAST_INCLUDE 0 | |
| 26 | +#define MCAST_EXCLUDE 1 | |
| 27 | + | |
| 28 | +#define SIO_GET_INTERFACE_LIST _IOR('t',127,u_long) | |
| 29 | + | |
| 30 | +#define SIO_GET_INTERFACE_LIST_EX _IOR('t',126,u_long) | |
| 31 | +#define SIO_SET_MULTICAST_FILTER _IOW('t',125,u_long) | |
| 32 | +#define SIO_GET_MULTICAST_FILTER _IOW('t',124 | IOC_IN,u_long) | |
| 33 | + | |
| 34 | +#define IP_OPTIONS 1 | |
| 35 | +#define IP_HDRINCL 2 | |
| 36 | +#define IP_TOS 3 | |
| 37 | +#define IP_TTL 4 | |
| 38 | +#define IP_MULTICAST_IF 9 | |
| 39 | +#define IP_MULTICAST_TTL 10 | |
| 40 | +#define IP_MULTICAST_LOOP 11 | |
| 41 | +#define IP_ADD_MEMBERSHIP 12 | |
| 42 | +#define IP_DROP_MEMBERSHIP 13 | |
| 43 | +#define IP_DONTFRAGMENT 14 | |
| 44 | +#define IP_ADD_SOURCE_MEMBERSHIP 15 | |
| 45 | +#define IP_DROP_SOURCE_MEMBERSHIP 16 | |
| 46 | +#define IP_BLOCK_SOURCE 17 | |
| 47 | +#define IP_UNBLOCK_SOURCE 18 | |
| 48 | +#define IP_PKTINFO 19 | |
| 49 | +#define IP_RECEIVE_BROADCAST 22 | |
| 50 | + | |
| 51 | +#define IPV6_HDRINCL 2 | |
| 52 | +#define IPV6_UNICAST_HOPS 4 | |
| 53 | +#define IPV6_MULTICAST_IF 9 | |
| 54 | +#define IPV6_MULTICAST_HOPS 10 | |
| 55 | +#define IPV6_MULTICAST_LOOP 11 | |
| 56 | +#define IPV6_ADD_MEMBERSHIP 12 | |
| 57 | +#define IPV6_DROP_MEMBERSHIP 13 | |
| 58 | +#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP | |
| 59 | +#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP | |
| 60 | +#define IPV6_PKTINFO 19 | |
| 61 | +#define IPV6_HOPLIMIT 21 | |
| 62 | +#define IPV6_PROTECTION_LEVEL 23 | |
| 63 | + | |
| 64 | +#define PROTECTION_LEVEL_UNRESTRICTED 10 | |
| 65 | +#define PROTECTION_LEVEL_DEFAULT 20 | |
| 66 | +#define PROTECTION_LEVEL_RESTRICTED 30 | |
| 67 | + | |
| 68 | +#define UDP_NOCHECKSUM 1 | |
| 69 | +#define UDP_CHECKSUM_COVERAGE 20 | |
| 70 | + | |
| 71 | +#define TCP_EXPEDITED_1122 0x0002 | |
| 72 | + | |
| 73 | +#ifndef s6_addr | |
| 74 | + | |
| 75 | +struct in6_addr { | |
| 76 | + __MINGW_EXTENSION union { | |
| 77 | + u_char Byte[16]; | |
| 78 | + u_short Word[8]; | |
| 79 | + } u; | |
| 80 | +}; | |
| 81 | + | |
| 82 | +#define in_addr6 in6_addr | |
| 83 | + | |
| 84 | +#define _S6_un u | |
| 85 | +#define _S6_u8 Byte | |
| 86 | +#define s6_addr _S6_un._S6_u8 | |
| 87 | + | |
| 88 | +#define s6_bytes u.Byte | |
| 89 | +#define s6_words u.Word | |
| 90 | +#endif | |
| 91 | + | |
| 92 | +typedef struct ipv6_mreq { | |
| 93 | + struct in6_addr ipv6mr_multiaddr; | |
| 94 | + unsigned int ipv6mr_interface; | |
| 95 | +} IPV6_MREQ; | |
| 96 | + | |
| 97 | +struct sockaddr_in6_old { | |
| 98 | + short sin6_family; | |
| 99 | + u_short sin6_port; | |
| 100 | + u_long sin6_flowinfo; | |
| 101 | + struct in6_addr sin6_addr; | |
| 102 | +}; | |
| 103 | + | |
| 104 | +struct sockaddr_in6 { | |
| 105 | + short sin6_family; | |
| 106 | + u_short sin6_port; | |
| 107 | + u_long sin6_flowinfo; | |
| 108 | + struct in6_addr sin6_addr; | |
| 109 | + u_long sin6_scope_id; | |
| 110 | +}; | |
| 111 | + | |
| 112 | +typedef struct in6_addr IN6_ADDR; | |
| 113 | +typedef struct in6_addr *PIN6_ADDR; | |
| 114 | +typedef struct in6_addr *LPIN6_ADDR; | |
| 115 | + | |
| 116 | +typedef struct sockaddr_in6 SOCKADDR_IN6; | |
| 117 | +typedef struct sockaddr_in6 *PSOCKADDR_IN6; | |
| 118 | +typedef struct sockaddr_in6 *LPSOCKADDR_IN6; | |
| 119 | + | |
| 120 | +#define SS_PORT(ssp) (((struct sockaddr_in*)(ssp))->sin_port) | |
| 121 | + | |
| 122 | +#define IN6ADDR_ANY_INIT { 0 } | |
| 123 | +#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } | |
| 124 | + | |
| 125 | +#ifdef __cplusplus | |
| 126 | +extern "C" { | |
| 127 | +#endif | |
| 128 | + | |
| 129 | + extern const struct in6_addr in6addr_any; | |
| 130 | + extern const struct in6_addr in6addr_loopback; | |
| 131 | + | |
| 132 | +#ifdef __cplusplus | |
| 133 | +} | |
| 134 | +#endif | |
| 135 | + | |
| 136 | +#define WS2TCPIP_INLINE __CRT_INLINE | |
| 137 | + | |
| 138 | +int IN6_ADDR_EQUAL(const struct in6_addr *,const struct in6_addr *); | |
| 139 | +int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *); | |
| 140 | +int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *); | |
| 141 | +int IN6_IS_ADDR_MULTICAST(const struct in6_addr *); | |
| 142 | +int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *); | |
| 143 | +int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *); | |
| 144 | +int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *); | |
| 145 | +int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *); | |
| 146 | +int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *); | |
| 147 | +int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *); | |
| 148 | +int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *); | |
| 149 | +int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *); | |
| 150 | +int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *); | |
| 151 | +int IN6ADDR_ISANY(const struct sockaddr_in6 *); | |
| 152 | +int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *); | |
| 153 | +void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *); | |
| 154 | +void IN6_SET_ADDR_LOOPBACK(struct in6_addr *); | |
| 155 | +void IN6ADDR_SETANY(struct sockaddr_in6 *); | |
| 156 | +void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *); | |
| 157 | + | |
| 158 | +#ifndef __CRT__NO_INLINE | |
| 159 | +WS2TCPIP_INLINE int IN6_ADDR_EQUAL(const struct in6_addr *a,const struct in6_addr *b) { return (memcmp(a,b,sizeof(struct in6_addr))==0); } | |
| 160 | +WS2TCPIP_INLINE int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && (a->s6_words[6]==0) && (a->s6_words[7]==0)); } | |
| 161 | +WS2TCPIP_INLINE int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && (a->s6_words[6]==0) && (a->s6_words[7]==0x0100)); } | |
| 162 | +WS2TCPIP_INLINE int IN6_IS_ADDR_MULTICAST(const struct in6_addr *a) { return (a->s6_bytes[0]==0xff); } | |
| 163 | +WS2TCPIP_INLINE int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0x80)); } | |
| 164 | +WS2TCPIP_INLINE int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0xc0)); } | |
| 165 | +WS2TCPIP_INLINE int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0xffff)); } | |
| 166 | +WS2TCPIP_INLINE int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && !((a->s6_words[6]==0) && (a->s6_addr[14]==0) && ((a->s6_addr[15]==0) || (a->s6_addr[15]==1)))); } | |
| 167 | +WS2TCPIP_INLINE int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==1); } | |
| 168 | +WS2TCPIP_INLINE int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==2); } | |
| 169 | +WS2TCPIP_INLINE int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==5); } | |
| 170 | +WS2TCPIP_INLINE int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==8); } | |
| 171 | +WS2TCPIP_INLINE int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==0xe); } | |
| 172 | +WS2TCPIP_INLINE int IN6ADDR_ISANY(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_UNSPECIFIED(&a->sin6_addr)); } | |
| 173 | +WS2TCPIP_INLINE int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_LOOPBACK(&a->sin6_addr)); } | |
| 174 | +WS2TCPIP_INLINE void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *a) { memset(a->s6_bytes,0,sizeof(struct in6_addr)); } | |
| 175 | +WS2TCPIP_INLINE void IN6_SET_ADDR_LOOPBACK(struct in6_addr *a) { | |
| 176 | + memset(a->s6_bytes,0,sizeof(struct in6_addr)); | |
| 177 | + a->s6_bytes[15] = 1; | |
| 178 | +} | |
| 179 | +WS2TCPIP_INLINE void IN6ADDR_SETANY(struct sockaddr_in6 *a) { | |
| 180 | + a->sin6_family = AF_INET6; | |
| 181 | + a->sin6_port = 0; | |
| 182 | + a->sin6_flowinfo = 0; | |
| 183 | + IN6_SET_ADDR_UNSPECIFIED(&a->sin6_addr); | |
| 184 | + a->sin6_scope_id = 0; | |
| 185 | +} | |
| 186 | +WS2TCPIP_INLINE void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *a) { | |
| 187 | + a->sin6_family = AF_INET6; | |
| 188 | + a->sin6_port = 0; | |
| 189 | + a->sin6_flowinfo = 0; | |
| 190 | + IN6_SET_ADDR_LOOPBACK(&a->sin6_addr); | |
| 191 | + a->sin6_scope_id = 0; | |
| 192 | +} | |
| 193 | +#endif /* !__CRT__NO_INLINE */ | |
| 194 | + | |
| 195 | +typedef union sockaddr_gen { | |
| 196 | + struct sockaddr Address; | |
| 197 | + struct sockaddr_in AddressIn; | |
| 198 | + struct sockaddr_in6_old AddressIn6; | |
| 199 | +} sockaddr_gen; | |
| 200 | + | |
| 201 | +typedef struct _INTERFACE_INFO { | |
| 202 | + u_long iiFlags; | |
| 203 | + sockaddr_gen iiAddress; | |
| 204 | + sockaddr_gen iiBroadcastAddress; | |
| 205 | + sockaddr_gen iiNetmask; | |
| 206 | +} INTERFACE_INFO,*LPINTERFACE_INFO; | |
| 207 | + | |
| 208 | +typedef struct _INTERFACE_INFO_EX { | |
| 209 | + u_long iiFlags; | |
| 210 | + SOCKET_ADDRESS iiAddress; | |
| 211 | + SOCKET_ADDRESS iiBroadcastAddress; | |
| 212 | + SOCKET_ADDRESS iiNetmask; | |
| 213 | +} INTERFACE_INFO_EX,*LPINTERFACE_INFO_EX; | |
| 214 | + | |
| 215 | +#define IFF_UP 0x00000001 | |
| 216 | +#define IFF_BROADCAST 0x00000002 | |
| 217 | +#define IFF_LOOPBACK 0x00000004 | |
| 218 | +#define IFF_POINTTOPOINT 0x00000008 | |
| 219 | +#define IFF_MULTICAST 0x00000010 | |
| 220 | + | |
| 221 | +typedef struct in_pktinfo { | |
| 222 | + IN_ADDR ipi_addr; | |
| 223 | + UINT ipi_ifindex; | |
| 224 | +} IN_PKTINFO; | |
| 225 | + | |
| 226 | +C_ASSERT(sizeof(IN_PKTINFO)==8); | |
| 227 | + | |
| 228 | +typedef struct in6_pktinfo { | |
| 229 | + IN6_ADDR ipi6_addr; | |
| 230 | + UINT ipi6_ifindex; | |
| 231 | +} IN6_PKTINFO; | |
| 232 | + | |
| 233 | +C_ASSERT(sizeof(IN6_PKTINFO)==20); | |
| 234 | + | |
| 235 | +#define EAI_AGAIN WSATRY_AGAIN | |
| 236 | +#define EAI_BADFLAGS WSAEINVAL | |
| 237 | +#define EAI_FAIL WSANO_RECOVERY | |
| 238 | +#define EAI_FAMILY WSAEAFNOSUPPORT | |
| 239 | +#define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY | |
| 240 | + | |
| 241 | +#define EAI_NONAME WSAHOST_NOT_FOUND | |
| 242 | +#define EAI_SERVICE WSATYPE_NOT_FOUND | |
| 243 | +#define EAI_SOCKTYPE WSAESOCKTNOSUPPORT | |
| 244 | + | |
| 245 | +#define EAI_NODATA EAI_NONAME | |
| 246 | + | |
| 247 | +typedef struct addrinfo { | |
| 248 | + int ai_flags; | |
| 249 | + int ai_family; | |
| 250 | + int ai_socktype; | |
| 251 | + int ai_protocol; | |
| 252 | + size_t ai_addrlen; | |
| 253 | + char *ai_canonname; | |
| 254 | + struct sockaddr *ai_addr; | |
| 255 | + struct addrinfo *ai_next; | |
| 256 | +} ADDRINFOA,*PADDRINFOA; | |
| 257 | + | |
| 258 | +typedef struct addrinfoW { | |
| 259 | + int ai_flags; | |
| 260 | + int ai_family; | |
| 261 | + int ai_socktype; | |
| 262 | + int ai_protocol; | |
| 263 | + size_t ai_addrlen; | |
| 264 | + PWSTR ai_canonname; | |
| 265 | + struct sockaddr *ai_addr; | |
| 266 | + struct addrinfoW *ai_next; | |
| 267 | +} ADDRINFOW,*PADDRINFOW; | |
| 268 | + | |
| 269 | +#ifdef UNICODE | |
| 270 | +typedef ADDRINFOW ADDRINFOT,*PADDRINFOT; | |
| 271 | +#else | |
| 272 | +typedef ADDRINFOA ADDRINFOT,*PADDRINFOT; | |
| 273 | +#endif | |
| 274 | + | |
| 275 | +typedef ADDRINFOA ADDRINFO,*LPADDRINFO; | |
| 276 | + | |
| 277 | +#define AI_PASSIVE 0x1 | |
| 278 | +#define AI_CANONNAME 0x2 | |
| 279 | +#define AI_NUMERICHOST 0x4 | |
| 280 | + | |
| 281 | +#ifdef __cplusplus | |
| 282 | +extern "C" { | |
| 283 | +#endif | |
| 284 | + | |
| 285 | +#ifdef UNICODE | |
| 286 | +#define GetAddrInfo GetAddrInfoW | |
| 287 | +#else | |
| 288 | +#define GetAddrInfo GetAddrInfoA | |
| 289 | +#endif | |
| 290 | + | |
| 291 | + WINSOCK_API_LINKAGE int WSAAPI getaddrinfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); | |
| 292 | + WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoW(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult); | |
| 293 | + | |
| 294 | +#define GetAddrInfoA getaddrinfo | |
| 295 | + | |
| 296 | +#if INCL_WINSOCK_API_TYPEDEFS | |
| 297 | + typedef int (WSAAPI *LPFN_GETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); | |
| 298 | + typedef int (WSAAPI *LPFN_GETADDRINFOW)(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult); | |
| 299 | + | |
| 300 | +#define LPFN_GETADDRINFOA LPFN_GETADDRINFO | |
| 301 | + | |
| 302 | +#ifdef UNICODE | |
| 303 | +#define LPFN_GETADDRINFOT LPFN_GETADDRINFOW | |
| 304 | +#else | |
| 305 | +#define LPFN_GETADDRINFOT LPFN_GETADDRINFOA | |
| 306 | +#endif | |
| 307 | +#endif | |
| 308 | + | |
| 309 | +#ifdef UNICODE | |
| 310 | +#define FreeAddrInfo FreeAddrInfoW | |
| 311 | +#else | |
| 312 | +#define FreeAddrInfo FreeAddrInfoA | |
| 313 | +#endif | |
| 314 | + | |
| 315 | + WINSOCK_API_LINKAGE void WSAAPI freeaddrinfo(LPADDRINFO pAddrInfo); | |
| 316 | + WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo); | |
| 317 | + | |
| 318 | +#define FreeAddrInfoA freeaddrinfo | |
| 319 | + | |
| 320 | +#if INCL_WINSOCK_API_TYPEDEFS | |
| 321 | + typedef void (WSAAPI *LPFN_FREEADDRINFO)(struct addrinfo *ai); | |
| 322 | + typedef void (WSAAPI *LPFN_FREEADDRINFOW)(PADDRINFOW pAddrInfo); | |
| 323 | + | |
| 324 | +#define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO | |
| 325 | + | |
| 326 | +#ifdef UNICODE | |
| 327 | +#define LPFN_FREEADDRINFOT LPFN_FREEADDRINFOW | |
| 328 | +#else | |
| 329 | +#define LPFN_FREEADDRINFOT LPFN_FREEADDRINFOA | |
| 330 | +#endif | |
| 331 | +#endif | |
| 332 | + | |
| 333 | +#pragma push_macro("socklen_t") | |
| 334 | +#undef socklen_t | |
| 335 | + | |
| 336 | + typedef int socklen_t; | |
| 337 | + | |
| 338 | +#ifdef UNICODE | |
| 339 | +#define GetNameInfo GetNameInfoW | |
| 340 | +#else | |
| 341 | +#define GetNameInfo GetNameInfoA | |
| 342 | +#endif | |
| 343 | + | |
| 344 | + WINSOCK_API_LINKAGE int WSAAPI getnameinfo(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags); | |
| 345 | + WINSOCK_API_LINKAGE INT WSAAPI GetNameInfoW(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags); | |
| 346 | + | |
| 347 | +#define GetNameInfoA getnameinfo | |
| 348 | + | |
| 349 | +#if INCL_WINSOCK_API_TYPEDEFS | |
| 350 | + typedef int (WSAAPI *LPFN_GETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags); | |
| 351 | + typedef INT (WSAAPI *LPFN_GETNAMEINFOW)(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags); | |
| 352 | + | |
| 353 | +#define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO | |
| 354 | + | |
| 355 | +#ifdef UNICODE | |
| 356 | +#define LPFN_GETNAMEINFOT LPFN_GETNAMEINFOW | |
| 357 | +#else | |
| 358 | +#define LPFN_GETNAMEINFOT LPFN_GETNAMEINFOA | |
| 359 | +#endif | |
| 360 | +#endif | |
| 361 | + | |
| 362 | +#pragma pop_macro("socklen_t") | |
| 363 | + | |
| 364 | +#ifdef UNICODE | |
| 365 | +#define gai_strerror gai_strerrorW | |
| 366 | +#else | |
| 367 | +#define gai_strerror gai_strerrorA | |
| 368 | +#endif | |
| 369 | + | |
| 370 | +#define GAI_STRERROR_BUFFER_SIZE 1024 | |
| 371 | + | |
| 372 | +char *gai_strerrorA (int); | |
| 373 | +WCHAR *gai_strerrorW(int); | |
| 374 | + | |
| 375 | +#define NI_MAXHOST 1025 | |
| 376 | +#define NI_MAXSERV 32 | |
| 377 | + | |
| 378 | +#define INET_ADDRSTRLEN 22 | |
| 379 | +#define INET6_ADDRSTRLEN 65 | |
| 380 | + | |
| 381 | +#define NI_NOFQDN 0x01 | |
| 382 | +#define NI_NUMERICHOST 0x02 | |
| 383 | +#define NI_NAMEREQD 0x04 | |
| 384 | +#define NI_NUMERICSERV 0x08 | |
| 385 | +#define NI_DGRAM 0x10 | |
| 386 | + | |
| 387 | +#ifdef __cplusplus | |
| 388 | +} | |
| 389 | +#endif | |
| 390 | + | |
| 391 | +#endif | |