DNS_STATUS dns_status;
PDNS_RECORD dp, currdns;
struct sockaddr_in *sin;
+ INT error;
if (res == NULL)
- return WSAEINVAL;
+ {
+ error = WSAEINVAL;
+ goto End;
+ }
if (nodename == NULL && servname == NULL)
- return WSAHOST_NOT_FOUND;
+ {
+ error = WSAHOST_NOT_FOUND;
+ goto End;
+ }
if (!WSAINITIALIZED)
- return WSANOTINITIALISED;
+ {
+ error = WSANOTINITIALISED;
+ goto End;
+ }
if (servname)
{
{
pent = getprotobynumber(hints->ai_protocol);
if (pent == NULL)
- return WSAEINVAL;
+ {
+ error = WSAEINVAL;
+ goto End;
+ }
proto = pent->p_name;
}
else
proto = NULL;
se = getservbyname(servname, proto);
if (se == NULL)
- return WSATYPE_NOT_FOUND;
+ {
+ error = WSATYPE_NOT_FOUND;
+ goto End;
+ }
port = se->s_port;
}
else
{
/* Is it an IPv6 address? */
if (strstr(nodename, ":"))
- return WSAHOST_NOT_FOUND;
+ {
+ error = WSAHOST_NOT_FOUND;
+ goto End;
+ }
/* Is it an IPv4 address? */
addr = inet_addr(nodename);
}
if (ret == NULL)
- return WSAHOST_NOT_FOUND;
+ {
+ error = WSAHOST_NOT_FOUND;
+ goto End;
+ }
if (hints && hints->ai_family != PF_UNSPEC && hints->ai_family != PF_INET)
{
freeaddrinfo(ret);
- return WSAEAFNOSUPPORT;
+ error = WSAEAFNOSUPPORT;
+ goto End;
}
*res = ret;
- return 0;
+ error = 0;
+
+End:
+ WSASetLastError(error);
+ return error;
}
/* EOF */