1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifndef _WS2TCPIP_H_ 7 #define _WS2TCPIP_H_ 8 9 #include <_mingw_unicode.h> 10 11 #ifdef __LP64__ 12 #pragma push_macro("u_long") 13 #undef u_long 14 #define u_long __ms_u_long 15 #endif 16 17 #include <winsock2.h> 18 #include <ws2ipdef.h> 19 #include <psdk_inc/_ip_mreq1.h> 20 #include <winapifamily.h> 21 22 struct ip_mreq_source { 23 struct in_addr imr_multiaddr; 24 struct in_addr imr_sourceaddr; 25 struct in_addr imr_interface; 26 }; 27 28 struct ip_msfilter { 29 struct in_addr imsf_multiaddr; 30 struct in_addr imsf_interface; 31 u_long imsf_fmode; 32 u_long imsf_numsrc; 33 struct in_addr imsf_slist[1]; 34 }; 35 36 #define IP_MSFILTER_SIZE(numsrc) (sizeof(struct ip_msfilter)-sizeof(struct in_addr) + (numsrc)*sizeof(struct in_addr)) 37 38 #define SIO_GET_INTERFACE_LIST _IOR('t',127,u_long) 39 40 #define SIO_GET_INTERFACE_LIST_EX _IOR('t',126,u_long) 41 #define SIO_SET_MULTICAST_FILTER _IOW('t',125,u_long) 42 #define SIO_GET_MULTICAST_FILTER _IOW('t',124 | IOC_IN,u_long) 43 44 #define IP_OPTIONS 1 45 #define IP_HDRINCL 2 46 #define IP_TOS 3 47 #define IP_TTL 4 48 #define IP_MULTICAST_IF 9 49 #define IP_MULTICAST_TTL 10 50 #define IP_MULTICAST_LOOP 11 51 #define IP_ADD_MEMBERSHIP 12 52 #define IP_DROP_MEMBERSHIP 13 53 #define IP_DONTFRAGMENT 14 54 #define IP_ADD_SOURCE_MEMBERSHIP 15 55 #define IP_DROP_SOURCE_MEMBERSHIP 16 56 #define IP_BLOCK_SOURCE 17 57 #define IP_UNBLOCK_SOURCE 18 58 #define IP_PKTINFO 19 59 #define IP_RECEIVE_BROADCAST 22 60 61 #define PROTECTION_LEVEL_UNRESTRICTED 10 62 #define PROTECTION_LEVEL_DEFAULT 20 63 #define PROTECTION_LEVEL_RESTRICTED 30 64 65 #define UDP_NOCHECKSUM 1 66 #define UDP_CHECKSUM_COVERAGE 20 67 68 #define TCP_EXPEDITED_1122 0x0002 69 70 71 #include <ws2ipdef.h> 72 73 74 #define SS_PORT(ssp) (((struct sockaddr_in*)(ssp))->sin_port) 75 76 #define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } 77 #define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } 78 79 #ifdef __cplusplus 80 extern "C" { 81 #endif 82 83 extern const struct in6_addr in6addr_any; 84 extern const struct in6_addr in6addr_loopback; 85 86 int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *); 87 int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *); 88 int IN6_IS_ADDR_MULTICAST(const struct in6_addr *); 89 int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *); 90 int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *); 91 int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *); 92 int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *); 93 int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *); 94 int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *); 95 int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *); 96 int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *); 97 int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *); 98 int IN6ADDR_ISANY(const struct sockaddr_in6 *); 99 int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *); 100 void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *); 101 void IN6_SET_ADDR_LOOPBACK(struct in6_addr *); 102 void IN6ADDR_SETANY(struct sockaddr_in6 *); 103 void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *); 104 105 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)); } 106 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)); } 107 WS2TCPIP_INLINE int IN6_IS_ADDR_MULTICAST(const struct in6_addr *a) { return (a->s6_bytes[0]==0xff); } 108 WS2TCPIP_INLINE int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0x80)); } 109 WS2TCPIP_INLINE int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0xc0)); } 110 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)); } 111 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)))); } 112 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); } 113 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); } 114 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); } 115 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); } 116 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); } 117 WS2TCPIP_INLINE int IN6ADDR_ISANY(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_UNSPECIFIED(&a->sin6_addr)); } 118 WS2TCPIP_INLINE int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_LOOPBACK(&a->sin6_addr)); } 119 WS2TCPIP_INLINE void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *a) { memset(a->s6_bytes,0,sizeof(struct in6_addr)); } 120 WS2TCPIP_INLINE void IN6_SET_ADDR_LOOPBACK(struct in6_addr *a) { 121 memset(a->s6_bytes,0,sizeof(struct in6_addr)); 122 a->s6_bytes[15] = 1; 123 } 124 WS2TCPIP_INLINE void IN6ADDR_SETANY(struct sockaddr_in6 *a) { 125 a->sin6_family = AF_INET6; 126 a->sin6_port = 0; 127 a->sin6_flowinfo = 0; 128 IN6_SET_ADDR_UNSPECIFIED(&a->sin6_addr); 129 a->sin6_scope_id = 0; 130 } 131 WS2TCPIP_INLINE void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *a) { 132 a->sin6_family = AF_INET6; 133 a->sin6_port = 0; 134 a->sin6_flowinfo = 0; 135 IN6_SET_ADDR_LOOPBACK(&a->sin6_addr); 136 a->sin6_scope_id = 0; 137 } 138 139 #ifdef __cplusplus 140 } 141 #endif 142 143 typedef struct _INTERFACE_INFO_EX { 144 u_long iiFlags; 145 SOCKET_ADDRESS iiAddress; 146 SOCKET_ADDRESS iiBroadcastAddress; 147 SOCKET_ADDRESS iiNetmask; 148 } INTERFACE_INFO_EX,*LPINTERFACE_INFO_EX; 149 150 #define IFF_UP 0x00000001 151 #define IFF_BROADCAST 0x00000002 152 #define IFF_LOOPBACK 0x00000004 153 #define IFF_POINTTOPOINT 0x00000008 154 #define IFF_MULTICAST 0x00000010 155 156 typedef struct in_pktinfo { 157 IN_ADDR ipi_addr; 158 UINT ipi_ifindex; 159 } IN_PKTINFO; 160 161 C_ASSERT(sizeof(IN_PKTINFO)==8); 162 163 typedef struct in6_pktinfo { 164 IN6_ADDR ipi6_addr; 165 UINT ipi6_ifindex; 166 } IN6_PKTINFO; 167 168 C_ASSERT(sizeof(IN6_PKTINFO)==20); 169 170 #define EAI_AGAIN WSATRY_AGAIN 171 #define EAI_BADFLAGS WSAEINVAL 172 #define EAI_FAIL WSANO_RECOVERY 173 #define EAI_FAMILY WSAEAFNOSUPPORT 174 #define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY 175 176 #define EAI_NONAME WSAHOST_NOT_FOUND 177 #define EAI_SERVICE WSATYPE_NOT_FOUND 178 #define EAI_SOCKTYPE WSAESOCKTNOSUPPORT 179 180 #define EAI_NODATA 11004 /* WSANO_DATA */ 181 182 typedef struct addrinfo { 183 int ai_flags; 184 int ai_family; 185 int ai_socktype; 186 int ai_protocol; 187 size_t ai_addrlen; 188 char *ai_canonname; 189 struct sockaddr *ai_addr; 190 struct addrinfo *ai_next; 191 } ADDRINFOA,*PADDRINFOA; 192 193 typedef struct addrinfoW { 194 int ai_flags; 195 int ai_family; 196 int ai_socktype; 197 int ai_protocol; 198 size_t ai_addrlen; 199 PWSTR ai_canonname; 200 struct sockaddr *ai_addr; 201 struct addrinfoW *ai_next; 202 } ADDRINFOW,*PADDRINFOW; 203 204 typedef __MINGW_NAME_AW(ADDRINFO) ADDRINFOT,*PADDRINFOT; 205 206 typedef ADDRINFOA ADDRINFO,*LPADDRINFO; 207 208 #define AI_PASSIVE 0x00000001 209 #define AI_CANONNAME 0x00000002 210 #define AI_NUMERICHOST 0x00000004 211 #if (_WIN32_WINNT >= 0x0600) 212 #define AI_NUMERICSERV 0x00000008 213 #define AI_ALL 0x00000100 214 #define AI_ADDRCONFIG 0x00000400 215 #define AI_V4MAPPED 0x00000800 216 #define AI_NON_AUTHORITATIVE 0x00004000 217 #define AI_SECURE 0x00008000 218 #define AI_RETURN_PREFERRED_NAMES 0x00010000 219 #endif 220 #if (_WIN32_WINNT >= 0x0601) 221 #define AI_FQDN 0x00020000 222 #define AI_FILESERVER 0x00040000 223 #endif 224 #if (_WIN32_WINNT >= 0x0602) 225 #define AI_DISABLE_IDN_ENCODING 0x00080000 226 #endif 227 228 #ifdef __cplusplus 229 extern "C" { 230 #endif 231 232 #define GetAddrInfo __MINGW_NAME_AW(GetAddrInfo) 233 234 WINSOCK_API_LINKAGE int WSAAPI getaddrinfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); 235 WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoW(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult); 236 237 #define GetAddrInfoA getaddrinfo 238 239 #if INCL_WINSOCK_API_TYPEDEFS 240 typedef int (WSAAPI *LPFN_GETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); 241 typedef int (WSAAPI *LPFN_GETADDRINFOW)(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult); 242 243 #define LPFN_GETADDRINFOA LPFN_GETADDRINFO 244 245 #define LPFN_GETADDRINFOT __MINGW_NAME_AW(LPFN_GETADDRINFO) 246 #endif 247 248 #define FreeAddrInfo __MINGW_NAME_AW(FreeAddrInfo) 249 250 WINSOCK_API_LINKAGE void WSAAPI freeaddrinfo(LPADDRINFO pAddrInfo); 251 WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo); 252 253 #define FreeAddrInfoA freeaddrinfo 254 255 #if INCL_WINSOCK_API_TYPEDEFS 256 typedef void (WSAAPI *LPFN_FREEADDRINFO)(struct addrinfo *ai); 257 typedef void (WSAAPI *LPFN_FREEADDRINFOW)(PADDRINFOW pAddrInfo); 258 259 #define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO 260 261 #define LPFN_FREEADDRINFOT __MINGW_NAME_AW(LPFN_FREEADDRINFO) 262 #endif 263 264 typedef int socklen_t; 265 266 #define GetNameInfo __MINGW_NAME_AW(GetNameInfo) 267 268 WINSOCK_API_LINKAGE int WSAAPI getnameinfo(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags); 269 WINSOCK_API_LINKAGE INT WSAAPI GetNameInfoW(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags); 270 271 #define GetNameInfoA getnameinfo 272 273 #if INCL_WINSOCK_API_TYPEDEFS 274 typedef int (WSAAPI *LPFN_GETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags); 275 typedef INT (WSAAPI *LPFN_GETNAMEINFOW)(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags); 276 277 #define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO 278 279 #define LPFN_GETNAMEINFOT __MINGW_NAME_AW(LPFN_GETNAMEINFO) 280 #endif 281 282 #define gai_strerror __MINGW_NAME_AW(gai_strerror) 283 284 #define GAI_STRERROR_BUFFER_SIZE 1024 285 286 char *gai_strerrorA (int); 287 WCHAR *gai_strerrorW(int); 288 289 #define NI_MAXHOST 1025 290 #define NI_MAXSERV 32 291 292 #define INET_ADDRSTRLEN 22 293 #define INET6_ADDRSTRLEN 65 294 295 #define NI_NOFQDN 0x01 296 #define NI_NUMERICHOST 0x02 297 #define NI_NAMEREQD 0x04 298 #define NI_NUMERICSERV 0x08 299 #define NI_DGRAM 0x10 300 301 #include <mstcpip.h> 302 303 #if (_WIN32_WINNT >= 0x0600) 304 #define addrinfoEx __MINGW_NAME_AW(addrinfoEx) 305 #define PADDRINFOEX __MINGW_NAME_AW(PADDRINFOEX) 306 #define GetAddrInfoEx __MINGW_NAME_AW(GetAddrInfoEx) 307 #define SetAddrInfoEx __MINGW_NAME_AW(SetAddrInfoEx) 308 #define FreeAddrInfoEx __MINGW_NAME_AW(FreeAddrInfoEx) 309 310 typedef struct addrinfoExA { 311 int ai_flags; 312 int ai_family; 313 int ai_socktype; 314 int ai_protocol; 315 size_t ai_addrlen; 316 LPCSTR ai_canonname; 317 struct sockaddr *ai_addr; 318 void *ai_blob; 319 size_t ai_bloblen; 320 LPGUID ai_provider; 321 struct addrinfoexA *ai_next; 322 } ADDRINFOEXA, *PADDRINFOEXA; 323 324 typedef struct addrinfoExW { 325 int ai_flags; 326 int ai_family; 327 int ai_socktype; 328 int ai_protocol; 329 size_t ai_addrlen; 330 LPCWSTR ai_canonname; 331 struct sockaddr *ai_addr; 332 void *ai_blob; 333 size_t ai_bloblen; 334 LPGUID ai_provider; 335 struct addrinfoexW *ai_next; 336 } ADDRINFOEXW, *PADDRINFOEXW; 337 338 typedef PVOID LPLOOKUPSERVICE_COMPLETION_ROUTINE; /*reserved*/ 339 340 WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExA(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace, 341 LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult, 342 PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, 343 LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, 344 LPHANDLE lpNameHandle); 345 WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace, 346 LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult, 347 PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, 348 LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, 349 LPHANDLE lpNameHandle); 350 351 WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExA(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses, 352 DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, 353 LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, 354 LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, 355 LPHANDLE lpNameHandle); 356 WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses, 357 DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, 358 LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, 359 LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, 360 LPHANDLE lpNameHandle); 361 362 WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExA(PADDRINFOEXA pAddrInfo); 363 WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExW(PADDRINFOEXW pAddrInfo); 364 365 #if INCL_WINSOCK_API_TYPEDEFS 366 #define LPFN_GETADDRINFOEX __MINGW_NAME_AW(LPFN_GETADDRINFOEX) 367 typedef int (WSAAPI *LPFN_GETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace, 368 LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult, 369 PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, 370 LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, 371 LPHANDLE lpNameHandle); 372 typedef int (WSAAPI *LPFN_GETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace, 373 LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult, 374 PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, 375 LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, 376 LPHANDLE lpNameHandle); 377 378 #define LPFN_SETADDRINFOEX __MINGW_NAME_AW(LPFN_SETADDRINFOEX) 379 typedef int (WSAAPI *LPFN_SETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses, 380 DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, 381 LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, 382 LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, 383 LPHANDLE lpNameHandle); 384 typedef int (WSAAPI *LPFN_SETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses, 385 DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, 386 LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, 387 LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, 388 LPHANDLE lpNameHandle); 389 390 #define LPFN_FREEADDRINFOEX __MINGW_NAME_AW(LPFN_FREEADDRINFOEX) 391 typedef void (WSAAPI *LPFN_FREEADDRINFOEXA)(PADDRINFOEXA pAddrInfo); 392 typedef void (WSAAPI *LPFN_FREEADDRINFOEXW)(PADDRINFOEXW pAddrInfo); 393 #endif /* INCL_WINSOCK_API_TYPEDEFS */ 394 395 396 WINSOCK_API_LINKAGE int WSAAPI WSAImpersonateSocketPeer( 397 SOCKET Socket, 398 const struct sockaddr *PeerAddress, 399 ULONG peerAddressLen 400 ); 401 402 WINSOCK_API_LINKAGE int WSAAPI WSAQuerySocketSecurity( 403 SOCKET Socket, 404 const SOCKET_SECURITY_QUERY_TEMPLATE *SecurityQueryTemplate, 405 ULONG SecurityQueryTemplateLen, 406 SOCKET_SECURITY_QUERY_INFO *SecurityQueryInfo, 407 ULONG *SecurityQueryInfoLen, 408 LPWSAOVERLAPPED Overlapped, 409 LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine 410 ); 411 412 WINSOCK_API_LINKAGE int WSAAPI WSARevertImpersonation(void); 413 414 WINSOCK_API_LINKAGE int WSAAPI WSASetSocketPeerTargetName( 415 SOCKET Socket, 416 const SOCKET_PEER_TARGET_NAME *PeerTargetName, 417 ULONG PeerTargetNameLen, 418 LPWSAOVERLAPPED Overlapped, 419 LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine 420 ); 421 422 WINSOCK_API_LINKAGE int WSAAPI WSASetSocketSecurity( 423 SOCKET Socket, 424 const SOCKET_SECURITY_SETTINGS *SecuritySettings, 425 ULONG SecuritySettingsLen, 426 LPWSAOVERLAPPED Overlapped, 427 LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine 428 ); 429 430 #define InetNtopA inet_ntop 431 432 WINSOCK_API_LINKAGE LPCWSTR WSAAPI InetNtopW(INT Family, PVOID pAddr, LPWSTR pStringBuf, size_t StringBufSIze); 433 WINSOCK_API_LINKAGE LPCSTR WSAAPI InetNtopA(INT Family, PVOID pAddr, LPSTR pStringBuf, size_t StringBufSize); 434 435 #define InetNtop __MINGW_NAME_AW(InetNtop) 436 437 #define InetPtonA inet_pton 438 439 WINSOCK_API_LINKAGE INT WSAAPI InetPtonW(INT Family, LPCWSTR pStringBuf, PVOID pAddr); 440 WINSOCK_API_LINKAGE INT WSAAPI InetPtonA(INT Family, LPCSTR pStringBuf, PVOID pAddr); 441 442 #define InetPton __MINGW_NAME_AW(InetPton) 443 444 #endif /*(_WIN32_WINNT >= 0x0600)*/ 445 446 #ifdef __cplusplus 447 } 448 #endif 449 450 #ifdef __LP64__ 451 #pragma pop_macro("u_long") 452 #endif 453 454 #endif /* _WS2TCPIP_H_ */ 455