From f38aedc71a419286cf2a6c1bb7411b159daa745c Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sat, 12 Nov 2016 11:15:32 +0800 Subject: [PATCH] Refine the ipv6first resolving --- src/netutils.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/netutils.c b/src/netutils.c index 1df1bac7..18b48260 100644 --- a/src/netutils.c +++ b/src/netutils.c @@ -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) {