• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef WIN32_LEAN_AND_MEAN
2 #define WIN32_LEAN_AND_MEAN
3 #endif
4 #undef  __CRT__NO_INLINE
5 #define __CRT__NO_INLINE
6 #include <winsock2.h>
7 #include <wspiapi.h>
8 
9 int WINAPI
WspiapiLookupNode(const char * pszNodeName,int iSocketType,int iProtocol,WORD wPort,WINBOOL bAI_CANONNAME,struct addrinfo ** pptResult)10 WspiapiLookupNode (const char *pszNodeName,
11 		   int iSocketType, int iProtocol,
12 		   WORD wPort, WINBOOL bAI_CANONNAME,
13 		   struct addrinfo **pptResult)
14 {
15   int err = 0, cntAlias = 0;
16   char name[NI_MAXHOST] = "";
17   char alias[NI_MAXHOST] = "";
18   char *pname = name, *palias = alias, *tmp = NULL;
19 
20   strncpy (pname, pszNodeName, NI_MAXHOST - 1);
21   pname[NI_MAXHOST - 1] = 0;
22   for (;;)
23     {
24 	err = WspiapiQueryDNS (pszNodeName, iSocketType, iProtocol, wPort, palias, pptResult);
25 	if (err)
26 	  break;
27 	if (*pptResult)
28 	  break;
29 	++cntAlias;
30 	if (strlen (palias) == 0 || !strcmp (pname, palias) || cntAlias == 16)
31 	  {
32 	    err = EAI_FAIL;
33 	    break;
34 	  }
35 	WspiapiSwap(pname, palias, tmp);
36     }
37   if (!err && bAI_CANONNAME)
38     {
39       (*pptResult)->ai_canonname = WspiapiStrdup (palias);
40       if (!(*pptResult)->ai_canonname)
41 	  err = EAI_MEMORY;
42     }
43   return err;
44 }
45