| /** | 
 |  * This file has no copyright assigned and is placed in the Public Domain. | 
 |  * This file is part of the mingw-w64 runtime package. | 
 |  * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
 |  */ | 
 | #ifndef _WS2TCPIP_H_ | 
 | #define _WS2TCPIP_H_ | 
 |  | 
 | #include <_mingw_unicode.h> | 
 |  | 
 | #include <winsock2.h> | 
 | #include <psdk_inc/_ip_mreq1.h> | 
 |  | 
 | struct ip_mreq_source { | 
 |   struct in_addr imr_multiaddr; | 
 |   struct in_addr imr_sourceaddr; | 
 |   struct in_addr imr_interface; | 
 | }; | 
 |  | 
 | struct ip_msfilter { | 
 |   struct in_addr imsf_multiaddr; | 
 |   struct in_addr imsf_interface; | 
 |   u_long imsf_fmode; | 
 |   u_long imsf_numsrc; | 
 |   struct in_addr imsf_slist[1]; | 
 | }; | 
 |  | 
 | #define IP_MSFILTER_SIZE(numsrc) (sizeof(struct ip_msfilter)-sizeof(struct in_addr) + (numsrc)*sizeof(struct in_addr)) | 
 |  | 
 | #define SIO_GET_INTERFACE_LIST _IOR('t',127,u_long) | 
 |  | 
 | #define SIO_GET_INTERFACE_LIST_EX _IOR('t',126,u_long) | 
 | #define SIO_SET_MULTICAST_FILTER _IOW('t',125,u_long) | 
 | #define SIO_GET_MULTICAST_FILTER _IOW('t',124 | IOC_IN,u_long) | 
 |  | 
 | #define IP_OPTIONS 1 | 
 | #define IP_HDRINCL 2 | 
 | #define IP_TOS 3 | 
 | #define IP_TTL 4 | 
 | #define IP_MULTICAST_IF 9 | 
 | #define IP_MULTICAST_TTL 10 | 
 | #define IP_MULTICAST_LOOP 11 | 
 | #define IP_ADD_MEMBERSHIP 12 | 
 | #define IP_DROP_MEMBERSHIP 13 | 
 | #define IP_DONTFRAGMENT 14 | 
 | #define IP_ADD_SOURCE_MEMBERSHIP 15 | 
 | #define IP_DROP_SOURCE_MEMBERSHIP 16 | 
 | #define IP_BLOCK_SOURCE 17 | 
 | #define IP_UNBLOCK_SOURCE 18 | 
 | #define IP_PKTINFO 19 | 
 | #define IP_RECEIVE_BROADCAST 22 | 
 |  | 
 | #define PROTECTION_LEVEL_UNRESTRICTED 10 | 
 | #define PROTECTION_LEVEL_DEFAULT 20 | 
 | #define PROTECTION_LEVEL_RESTRICTED 30 | 
 |  | 
 | #define UDP_NOCHECKSUM 1 | 
 | #define UDP_CHECKSUM_COVERAGE 20 | 
 |  | 
 | #define TCP_EXPEDITED_1122 0x0002 | 
 |  | 
 |  | 
 | #include <ws2ipdef.h> | 
 |  | 
 |  | 
 | #define SS_PORT(ssp) (((struct sockaddr_in*)(ssp))->sin_port) | 
 |  | 
 | #define IN6ADDR_ANY_INIT { 0 } | 
 | #define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } | 
 |  | 
 | #ifdef __cplusplus | 
 | extern "C" { | 
 | #endif | 
 |  | 
 |   extern const struct in6_addr in6addr_any; | 
 |   extern const struct in6_addr in6addr_loopback; | 
 |  | 
 | #define WS2TCPIP_INLINE __CRT_INLINE | 
 |  | 
 | int IN6_ADDR_EQUAL(const struct in6_addr *,const struct in6_addr *); | 
 | int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *); | 
 | int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *); | 
 | int IN6_IS_ADDR_MULTICAST(const struct in6_addr *); | 
 | int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *); | 
 | int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *); | 
 | int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *); | 
 | int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *); | 
 | int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *); | 
 | int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *); | 
 | int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *); | 
 | int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *); | 
 | int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *); | 
 | int IN6ADDR_ISANY(const struct sockaddr_in6 *); | 
 | int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *); | 
 | void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *); | 
 | void IN6_SET_ADDR_LOOPBACK(struct in6_addr *); | 
 | void IN6ADDR_SETANY(struct sockaddr_in6 *); | 
 | void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *); | 
 |  | 
 | 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); } | 
 | 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)); } | 
 | 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)); } | 
 | WS2TCPIP_INLINE int IN6_IS_ADDR_MULTICAST(const struct in6_addr *a) { return (a->s6_bytes[0]==0xff); } | 
 | WS2TCPIP_INLINE int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0x80)); } | 
 | WS2TCPIP_INLINE int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0xc0)); } | 
 | 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)); } | 
 | 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)))); } | 
 | 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); } | 
 | 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); } | 
 | 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); } | 
 | 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); } | 
 | 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); } | 
 | WS2TCPIP_INLINE int IN6ADDR_ISANY(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_UNSPECIFIED(&a->sin6_addr)); } | 
 | WS2TCPIP_INLINE int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_LOOPBACK(&a->sin6_addr)); } | 
 | WS2TCPIP_INLINE void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *a) { memset(a->s6_bytes,0,sizeof(struct in6_addr)); } | 
 | WS2TCPIP_INLINE void IN6_SET_ADDR_LOOPBACK(struct in6_addr *a) { | 
 |   memset(a->s6_bytes,0,sizeof(struct in6_addr)); | 
 |   a->s6_bytes[15] = 1; | 
 | } | 
 | WS2TCPIP_INLINE void IN6ADDR_SETANY(struct sockaddr_in6 *a) { | 
 |   a->sin6_family = AF_INET6; | 
 |   a->sin6_port = 0; | 
 |   a->sin6_flowinfo = 0; | 
 |   IN6_SET_ADDR_UNSPECIFIED(&a->sin6_addr); | 
 |   a->sin6_scope_id = 0; | 
 | } | 
 | WS2TCPIP_INLINE void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *a) { | 
 |   a->sin6_family = AF_INET6; | 
 |   a->sin6_port = 0; | 
 |   a->sin6_flowinfo = 0; | 
 |   IN6_SET_ADDR_LOOPBACK(&a->sin6_addr); | 
 |   a->sin6_scope_id = 0; | 
 | } | 
 |  | 
 | #ifdef __cplusplus | 
 | } | 
 | #endif | 
 |  | 
 | typedef struct _INTERFACE_INFO_EX { | 
 |   u_long iiFlags; | 
 |   SOCKET_ADDRESS iiAddress; | 
 |   SOCKET_ADDRESS iiBroadcastAddress; | 
 |   SOCKET_ADDRESS iiNetmask; | 
 | } INTERFACE_INFO_EX,*LPINTERFACE_INFO_EX; | 
 |  | 
 | #define IFF_UP 0x00000001 | 
 | #define IFF_BROADCAST 0x00000002 | 
 | #define IFF_LOOPBACK 0x00000004 | 
 | #define IFF_POINTTOPOINT 0x00000008 | 
 | #define IFF_MULTICAST 0x00000010 | 
 |  | 
 | typedef struct in_pktinfo { | 
 |   IN_ADDR ipi_addr; | 
 |   UINT ipi_ifindex; | 
 | } IN_PKTINFO; | 
 |  | 
 | C_ASSERT(sizeof(IN_PKTINFO)==8); | 
 |  | 
 | typedef struct in6_pktinfo { | 
 |   IN6_ADDR ipi6_addr; | 
 |   UINT ipi6_ifindex; | 
 | } IN6_PKTINFO; | 
 |  | 
 | C_ASSERT(sizeof(IN6_PKTINFO)==20); | 
 |  | 
 | #define EAI_AGAIN WSATRY_AGAIN | 
 | #define EAI_BADFLAGS WSAEINVAL | 
 | #define EAI_FAIL WSANO_RECOVERY | 
 | #define EAI_FAMILY WSAEAFNOSUPPORT | 
 | #define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY | 
 |  | 
 | #define EAI_NONAME WSAHOST_NOT_FOUND | 
 | #define EAI_SERVICE WSATYPE_NOT_FOUND | 
 | #define EAI_SOCKTYPE WSAESOCKTNOSUPPORT | 
 |  | 
 | #define EAI_NODATA 11004 /* WSANO_DATA */ | 
 |  | 
 | typedef struct addrinfo { | 
 |   int ai_flags; | 
 |   int ai_family; | 
 |   int ai_socktype; | 
 |   int ai_protocol; | 
 |   size_t ai_addrlen; | 
 |   char *ai_canonname; | 
 |   struct sockaddr *ai_addr; | 
 |   struct addrinfo *ai_next; | 
 | } ADDRINFOA,*PADDRINFOA; | 
 |  | 
 | typedef struct addrinfoW { | 
 |   int ai_flags; | 
 |   int ai_family; | 
 |   int ai_socktype; | 
 |   int ai_protocol; | 
 |   size_t ai_addrlen; | 
 |   PWSTR ai_canonname; | 
 |   struct sockaddr *ai_addr; | 
 |   struct addrinfoW *ai_next; | 
 | } ADDRINFOW,*PADDRINFOW; | 
 |  | 
 | typedef __MINGW_NAME_AW(ADDRINFO) ADDRINFOT,*PADDRINFOT; | 
 |  | 
 | typedef ADDRINFOA ADDRINFO,*LPADDRINFO; | 
 |  | 
 | #define AI_PASSIVE 0x1 | 
 | #define AI_CANONNAME 0x2 | 
 | #define AI_NUMERICHOST 0x4 | 
 | #if (_WIN32_WINNT >= 0x0600) | 
 | #define AI_ADDRCONFIG             0x0400 | 
 | #define AI_NON_AUTHORITATIVE      0x04000 | 
 | #define AI_SECURE                 0x08000 | 
 | #define AI_RETURN_PREFERRED_NAMES 0x010000 | 
 | #endif | 
 |  | 
 | #ifdef __cplusplus | 
 | extern "C" { | 
 | #endif | 
 |  | 
 | #define GetAddrInfo __MINGW_NAME_AW(GetAddrInfo) | 
 |  | 
 |   WINSOCK_API_LINKAGE int WSAAPI getaddrinfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); | 
 |   WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoW(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult); | 
 |  | 
 | #define GetAddrInfoA getaddrinfo | 
 |  | 
 | #if INCL_WINSOCK_API_TYPEDEFS | 
 |   typedef int (WSAAPI *LPFN_GETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); | 
 |   typedef int (WSAAPI *LPFN_GETADDRINFOW)(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult); | 
 |  | 
 | #define LPFN_GETADDRINFOA LPFN_GETADDRINFO | 
 |  | 
 | #define LPFN_GETADDRINFOT __MINGW_NAME_AW(LPFN_GETADDRINFO) | 
 | #endif | 
 |  | 
 | #define FreeAddrInfo __MINGW_NAME_AW(FreeAddrInfo) | 
 |  | 
 |   WINSOCK_API_LINKAGE void WSAAPI freeaddrinfo(LPADDRINFO pAddrInfo); | 
 |   WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo); | 
 |  | 
 | #define FreeAddrInfoA freeaddrinfo | 
 |  | 
 | #if INCL_WINSOCK_API_TYPEDEFS | 
 |   typedef void (WSAAPI *LPFN_FREEADDRINFO)(struct addrinfo *ai); | 
 |   typedef void (WSAAPI *LPFN_FREEADDRINFOW)(PADDRINFOW pAddrInfo); | 
 |  | 
 | #define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO | 
 |  | 
 | #define LPFN_FREEADDRINFOT __MINGW_NAME_AW(LPFN_FREEADDRINFO) | 
 | #endif | 
 |  | 
 |   typedef int socklen_t; | 
 |  | 
 | #define GetNameInfo __MINGW_NAME_AW(GetNameInfo) | 
 |  | 
 |   WINSOCK_API_LINKAGE int WSAAPI getnameinfo(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags); | 
 |   WINSOCK_API_LINKAGE INT WSAAPI GetNameInfoW(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags); | 
 |  | 
 | #define GetNameInfoA getnameinfo | 
 |  | 
 | #if INCL_WINSOCK_API_TYPEDEFS | 
 |   typedef int (WSAAPI *LPFN_GETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags); | 
 |   typedef INT (WSAAPI *LPFN_GETNAMEINFOW)(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags); | 
 |  | 
 | #define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO | 
 |  | 
 | #define LPFN_GETNAMEINFOT __MINGW_NAME_AW(LPFN_GETNAMEINFO) | 
 | #endif | 
 |  | 
 | #define gai_strerror __MINGW_NAME_AW(gai_strerror) | 
 |  | 
 | #define GAI_STRERROR_BUFFER_SIZE 1024 | 
 |  | 
 | char *gai_strerrorA (int); | 
 | WCHAR *gai_strerrorW(int); | 
 |  | 
 | #define NI_MAXHOST 1025 | 
 | #define NI_MAXSERV 32 | 
 |  | 
 | #define INET_ADDRSTRLEN 22 | 
 | #define INET6_ADDRSTRLEN 65 | 
 |  | 
 | #define NI_NOFQDN 0x01 | 
 | #define NI_NUMERICHOST 0x02 | 
 | #define NI_NAMEREQD 0x04 | 
 | #define NI_NUMERICSERV 0x08 | 
 | #define NI_DGRAM 0x10 | 
 |  | 
 | #include <mstcpip.h> | 
 |  | 
 | #if (_WIN32_WINNT >= 0x0600) | 
 | #define addrinfoEx __MINGW_NAME_AW(addrinfoEx) | 
 | #define PADDRINFOEX __MINGW_NAME_AW(PADDRINFOEX) | 
 | #define GetAddrInfoEx __MINGW_NAME_AW(GetAddrInfoEx) | 
 | #define SetAddrInfoEx __MINGW_NAME_AW(SetAddrInfoEx) | 
 | #define FreeAddrInfoEx __MINGW_NAME_AW(FreeAddrInfoEx) | 
 |  | 
 |   typedef struct addrinfoExA { | 
 |     int                ai_flags; | 
 |     int                ai_family; | 
 |     int                ai_socktype; | 
 |     int                ai_protocol; | 
 |     size_t             ai_addrlen; | 
 |     LPCSTR             ai_canonname; | 
 |     struct sockaddr    *ai_addr; | 
 |     void               *ai_blob; | 
 |     size_t             ai_bloblen; | 
 |     LPGUID             ai_provider; | 
 |     struct addrinfoexA *ai_next; | 
 |   } ADDRINFOEXA, *PADDRINFOEXA; | 
 |  | 
 |   typedef struct addrinfoExW { | 
 |     int                ai_flags; | 
 |     int                ai_family; | 
 |     int                ai_socktype; | 
 |     int                ai_protocol; | 
 |     size_t             ai_addrlen; | 
 |     LPCWSTR            ai_canonname; | 
 |     struct sockaddr    *ai_addr; | 
 |     void               *ai_blob; | 
 |     size_t             ai_bloblen; | 
 |     LPGUID             ai_provider; | 
 |     struct addrinfoexW *ai_next; | 
 |   } ADDRINFOEXW, *PADDRINFOEXW; | 
 |  | 
 | typedef PVOID LPLOOKUPSERVICE_COMPLETION_ROUTINE; /*reserved*/ | 
 |  | 
 | WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExA(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace, | 
 | 					      LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult, | 
 | 					      PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, | 
 | 					      LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, | 
 | 					      LPHANDLE lpNameHandle); | 
 | WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace, | 
 | 					      LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult, | 
 | 					      PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, | 
 | 					      LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, | 
 | 					      LPHANDLE lpNameHandle); | 
 |  | 
 | WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExA(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses, | 
 | 					      DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, | 
 | 					      LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, | 
 | 					      LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, | 
 | 					      LPHANDLE lpNameHandle); | 
 | WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses, | 
 | 					      DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, | 
 | 					      LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, | 
 | 					      LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, | 
 | 					      LPHANDLE lpNameHandle); | 
 |  | 
 | WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExA(PADDRINFOEXA pAddrInfo); | 
 | WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExW(PADDRINFOEXW pAddrInfo); | 
 |  | 
 | #if INCL_WINSOCK_API_TYPEDEFS | 
 | #define LPFN_GETADDRINFOEX __MINGW_NAME_AW(LPFN_GETADDRINFOEX) | 
 |   typedef int (WSAAPI *LPFN_GETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace, | 
 | 					    LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult, | 
 | 					    PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, | 
 | 					    LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, | 
 | 					    LPHANDLE lpNameHandle); | 
 |   typedef int (WSAAPI *LPFN_GETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace, | 
 | 					    LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult, | 
 | 					    PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, | 
 | 					    LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, | 
 | 					    LPHANDLE lpNameHandle); | 
 |  | 
 | #define LPFN_SETADDRINFOEX __MINGW_NAME_AW(LPFN_SETADDRINFOEX) | 
 |   typedef int (WSAAPI *LPFN_SETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses, | 
 | 					    DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, | 
 | 					    LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, | 
 | 					    LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, | 
 | 					    LPHANDLE lpNameHandle); | 
 |   typedef int (WSAAPI *LPFN_SETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses, | 
 | 					    DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace, | 
 | 					    LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped, | 
 | 					    LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, | 
 | 					    LPHANDLE lpNameHandle); | 
 |  | 
 | #define LPFN_FREEADDRINFOEX __MINGW_NAME_AW(LPFN_FREEADDRINFOEX) | 
 |   typedef void (WSAAPI *LPFN_FREEADDRINFOEXA)(PADDRINFOEXA pAddrInfo); | 
 |   typedef void (WSAAPI *LPFN_FREEADDRINFOEXW)(PADDRINFOEXW pAddrInfo); | 
 | #endif /* INCL_WINSOCK_API_TYPEDEFS */ | 
 |  | 
 |  | 
 | WINSOCK_API_LINKAGE int WSAAPI WSAImpersonateSocketPeer( | 
 |   SOCKET Socket, | 
 |   const struct sockaddr *PeerAddress, | 
 |   ULONG peerAddressLen | 
 | ); | 
 |  | 
 | WINSOCK_API_LINKAGE int WSAAPI WSAQuerySocketSecurity( | 
 |   SOCKET Socket, | 
 |   const SOCKET_SECURITY_QUERY_TEMPLATE *SecurityQueryTemplate, | 
 |   ULONG SecurityQueryTemplateLen, | 
 |   SOCKET_SECURITY_QUERY_INFO *SecurityQueryInfo, | 
 |   ULONG *SecurityQueryInfoLen, | 
 |   LPWSAOVERLAPPED Overlapped, | 
 |   LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine | 
 | ); | 
 |  | 
 | WINSOCK_API_LINKAGE int WSAAPI WSARevertImpersonation(void); | 
 |  | 
 | WINSOCK_API_LINKAGE int WSAAPI WSASetSocketPeerTargetName( | 
 |   SOCKET Socket, | 
 |   const SOCKET_PEER_TARGET_NAME *PeerTargetName, | 
 |   ULONG PeerTargetNameLen, | 
 |   LPWSAOVERLAPPED Overlapped, | 
 |   LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine | 
 | ); | 
 |  | 
 | WINSOCK_API_LINKAGE int WSAAPI WSASetSocketSecurity( | 
 |   SOCKET Socket, | 
 |   const SOCKET_SECURITY_SETTINGS *SecuritySettings, | 
 |   ULONG SecuritySettingsLen, | 
 |   LPWSAOVERLAPPED Overlapped, | 
 |   LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine | 
 | ); | 
 |  | 
 | #define InetNtopA inet_ntop | 
 |  | 
 | WINSOCK_API_LINKAGE LPCWSTR WSAAPI InetNtopW(INT Family, PVOID pAddr, LPWSTR pStringBuf, size_t StringBufSIze); | 
 | WINSOCK_API_LINKAGE LPCSTR WSAAPI InetNtopA(INT Family, PVOID pAddr, LPSTR pStringBuf, size_t StringBufSize); | 
 |  | 
 | #define InetNtop __MINGW_NAME_AW(InetNtop) | 
 |  | 
 | #define InetPtonA inet_pton | 
 |  | 
 | WINSOCK_API_LINKAGE INT WSAAPI InetPtonW(INT Family, LPCWSTR pStringBuf, PVOID pAddr); | 
 | WINSOCK_API_LINKAGE INT WSAAPI InetPtonA(INT Family, LPCSTR pStringBuf, PVOID pAddr); | 
 |  | 
 | #define InetPton __MINGW_NAME_AW(InetPton) | 
 |  | 
 | #endif /*(_WIN32_WINNT >= 0x0600)*/ | 
 |  | 
 | #ifdef __cplusplus | 
 | } | 
 | #endif | 
 |  | 
 | #endif /* _WS2TCPIP_H_ */ |