Refine the ipv6first resolving

This commit is contained in:
Max Lv
2016-11-12 11:15:32 +08:00
parent 5cd294879b
commit f38aedc71a
+10 -5
View File
@@ -172,16 +172,21 @@ get_sockaddr(char *host, char *port,
int prefer_af = ipv6first ? AF_INET6 : AF_INET;
for (rp = result; rp != NULL; rp = rp->ai_next)
if (rp->ai_family == prefer_af) {
memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in));
if (rp->ai_family == AF_INET)
memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in));
else if (rp->ai_family == AF_INET6)
memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in6));
break;
}
if (rp == NULL) {
for (rp = result; rp != NULL; rp = rp->ai_next)
if (rp->ai_family == AF_INET6) {
for (rp = result; rp != NULL; rp = rp->ai_next) {
if (rp->ai_family == AF_INET)
memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in));
else if (rp->ai_family == AF_INET6)
memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in6));
break;
}
break;
}
}
if (rp == NULL) {