nameserv: avoid unnecessary getaddrinfo() calls
Check if the name passed to DNS_Name2IPAddress() is an IP address before calling getaddrinfo(), which can be much slower and work differently on different systems.
This commit is contained in:
parent
10c760a80c
commit
579d8c9907
1 changed files with 13 additions and 3 deletions
16
nameserv.c
16
nameserv.c
|
@ -52,9 +52,22 @@ DNS_Name2IPAddress(const char *name, IPAddr *ip_addrs, int max_addrs)
|
|||
{
|
||||
struct addrinfo hints, *res, *ai;
|
||||
int i, result;
|
||||
IPAddr ip;
|
||||
|
||||
max_addrs = MIN(max_addrs, DNS_MAX_ADDRESSES);
|
||||
|
||||
for (i = 0; i < max_addrs; i++)
|
||||
ip_addrs[i].family = IPADDR_UNSPEC;
|
||||
|
||||
/* Avoid calling getaddrinfo() if the name is an IP address */
|
||||
if (UTI_StringToIP(name, &ip)) {
|
||||
if (address_family != IPADDR_UNSPEC && ip.family != address_family)
|
||||
return DNS_Failure;
|
||||
if (max_addrs >= 1)
|
||||
ip_addrs[0] = ip;
|
||||
return DNS_Success;
|
||||
}
|
||||
|
||||
memset(&hints, 0, sizeof (hints));
|
||||
|
||||
switch (address_family) {
|
||||
|
@ -106,9 +119,6 @@ DNS_Name2IPAddress(const char *name, IPAddr *ip_addrs, int max_addrs)
|
|||
}
|
||||
}
|
||||
|
||||
for (; i < max_addrs; i++)
|
||||
ip_addrs[i].family = IPADDR_UNSPEC;
|
||||
|
||||
freeaddrinfo(res);
|
||||
|
||||
return !max_addrs || ip_addrs[0].family != IPADDR_UNSPEC ? DNS_Success : DNS_Failure;
|
||||
|
|
Loading…
Reference in a new issue