getIpaddrByNameEx: IPv4 has priority over IPv6

use_iouring
YuQing 2025-09-10 15:05:15 +08:00
parent b97f23ced2
commit f136821c0d
1 changed files with 10 additions and 11 deletions

View File

@ -1238,18 +1238,18 @@ in_addr_64_t getIpaddrByNameEx(const char *name, char *buff,
return addr4.s_addr; return addr4.s_addr;
} }
*af = AF_UNSPEC;
memset(&hints, 0, sizeof hints); memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // 支持IPv4和IPv6 hints.ai_family = AF_UNSPEC;
if (getaddrinfo(name, NULL, &hints, &res) != 0) if (getaddrinfo(name, NULL, &hints, &res) != 0)
{ {
*af = AF_UNSPEC;
return INADDR_NONE; return INADDR_NONE;
} }
ip_addr = INADDR_NONE;
for (p = res; p != NULL; p = p->ai_next) for (p = res; p != NULL; p = p->ai_next)
{ {
*af = p->ai_family; if (p->ai_family == AF_INET) //IPv4 address
if (p->ai_family == AF_INET) // 处理IPv4地址
{ {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr; struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
if (buff != NULL) if (buff != NULL)
@ -1260,11 +1260,11 @@ in_addr_64_t getIpaddrByNameEx(const char *name, char *buff,
} }
} }
*af = p->ai_family;
ip_addr = ipv4->sin_addr.s_addr; ip_addr = ipv4->sin_addr.s_addr;
freeaddrinfo(res); break;
return ip_addr;
} }
else if (p->ai_family == AF_INET6) // 处理IPv6地址 else if (p->ai_family == AF_INET6) //IPv6 address
{ {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr; struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
if (buff != NULL) if (buff != NULL)
@ -1281,15 +1281,14 @@ in_addr_64_t getIpaddrByNameEx(const char *name, char *buff,
} }
} }
*af = p->ai_family;
ip_addr = *((in_addr_64_t *)((char *)&ipv6->sin6_addr + 8)); ip_addr = *((in_addr_64_t *)((char *)&ipv6->sin6_addr + 8));
freeaddrinfo(res); continue;
return ip_addr;
} }
} }
freeaddrinfo(res); freeaddrinfo(res);
*af = AF_UNSPEC; return ip_addr;
return INADDR_NONE;
} }
int getIpaddrsByName(const char *name, int getIpaddrsByName(const char *name,