#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#undef  __CRT__NO_INLINE
#define __CRT__NO_INLINE
#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;
}
