49 lines
1.2 KiB
C
49 lines
1.2 KiB
C
#ifndef WIN32_LEAN_AND_MEAN
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#endif
|
|
#undef __CRT__NO_INLINE
|
|
#define __CRT__NO_INLINE
|
|
#include <winsock2.h>
|
|
#include <wspiapi.h>
|
|
|
|
int WINAPI
|
|
WspiapiQueryDNS(const char *pszNodeName,
|
|
int iSocketType, int iProtocol,
|
|
WORD wPort, char pszAlias[NI_MAXHOST],
|
|
struct addrinfo **pptResult)
|
|
{
|
|
struct addrinfo **paddrinfo = pptResult;
|
|
struct hostent *phost = NULL;
|
|
char **h;
|
|
|
|
*paddrinfo = NULL;
|
|
pszAlias[0] = 0;
|
|
phost = gethostbyname (pszNodeName);
|
|
if (phost)
|
|
{
|
|
if (phost->h_addrtype == AF_INET && phost->h_length == sizeof(struct in_addr))
|
|
{
|
|
for (h = phost->h_addr_list; *h != NULL; h++)
|
|
{
|
|
*paddrinfo = WspiapiNewAddrInfo (iSocketType, iProtocol, wPort,
|
|
((struct in_addr *) *h)->s_addr);
|
|
if (!*paddrinfo)
|
|
return EAI_MEMORY;
|
|
paddrinfo = &((*paddrinfo)->ai_next);
|
|
}
|
|
}
|
|
strncpy (pszAlias, phost->h_name, NI_MAXHOST - 1);
|
|
pszAlias[NI_MAXHOST - 1] = 0;
|
|
return 0;
|
|
}
|
|
switch(WSAGetLastError())
|
|
{
|
|
case WSAHOST_NOT_FOUND: break;
|
|
case WSATRY_AGAIN: return EAI_AGAIN;
|
|
case WSANO_RECOVERY: return EAI_FAIL;
|
|
case WSANO_DATA: return EAI_NODATA;
|
|
default: break;
|
|
}
|
|
return EAI_NONAME;
|
|
}
|