From 54817ef6f3e91c8e88c1db828868414d2093d3c1 Mon Sep 17 00:00:00 2001 From: Ted Percival Date: Fri, 4 Dec 2009 13:39:53 -0700 Subject: [PATCH] Revert "Try both v4 and v6 socket types" It broke detection of IPv4 addresses on HP-UX machines with an IPv6 loopback address. Successful resolution of at least one IPv6 address would then skip doing a separate IPv4 lookup as required by HP-UX. This reverts commit 76afc31e9ba2f37e64c70adc006ade9e37e9ef73. Signed-off-by: Love Hornquist Astrand --- lib/roken/getifaddrs.c | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/lib/roken/getifaddrs.c b/lib/roken/getifaddrs.c index d9f4950ca..0ba1b29cf 100644 --- a/lib/roken/getifaddrs.c +++ b/lib/roken/getifaddrs.c @@ -1010,12 +1010,11 @@ getifaddrs2(struct ifaddrs **ifap, #if defined(HAVE_IPV6) && defined(SIOCGLIFCONF) && defined(SIOCGLIFFLAGS) static int getlifaddrs2(struct ifaddrs **ifap, - int siocgifconf, int siocgifflags, + int af, int siocgifconf, int siocgifflags, size_t ifreq_sz) { int ret; - int fd_inet6; - int fd_inet; + int fd; size_t buf_size; char *buf; struct lifconf ifconf; @@ -1028,16 +1027,10 @@ getlifaddrs2(struct ifaddrs **ifap, buf = NULL; memset (&sa_zero, 0, sizeof(sa_zero)); - fd_inet6 = socket(AF_INET6, SOCK_DGRAM, 0); - if (fd_inet6 < 0) + fd = socket(af, SOCK_DGRAM, 0); + if (fd < 0) return -1; - fd_inet = socket(AF_INET, SOCK_DGRAM, 0); - if (fd_inet < 0) { - close(fd_inet6); - return -1; - } - buf_size = 8192; for (;;) { buf = calloc(1, buf_size); @@ -1055,7 +1048,7 @@ getlifaddrs2(struct ifaddrs **ifap, /* * Solaris returns EINVAL when the buffer is too small. */ - if (ioctl (fd_inet, siocgifconf, &ifconf) < 0 && errno != EINVAL) { + if (ioctl (fd, siocgifconf, &ifconf) < 0 && errno != EINVAL) { ret = errno; goto error_out; } @@ -1093,11 +1086,9 @@ getlifaddrs2(struct ifaddrs **ifap, memset (&ifreq, 0, sizeof(ifreq)); memcpy (ifreq.lifr_name, ifr->lifr_name, sizeof(ifr->lifr_name)); - if (ioctl(fd_inet6, siocgifflags, &ifreq) < 0) { - if (ioctl(fd_inet, siocgifflags, &ifreq) < 0) { - ret = errno; - goto error_out; - } + if (ioctl(fd, siocgifflags, &ifreq) < 0) { + ret = errno; + goto error_out; } *end = malloc(sizeof(**end)); @@ -1151,14 +1142,12 @@ getlifaddrs2(struct ifaddrs **ifap, } *ifap = start; - close(fd_inet6); - close(fd_inet); + close(fd); free(buf); return 0; error_out: rk_freeifaddrs(start); - close(fd_inet6); - close(fd_inet); + close(fd); free(buf); errno = ret; return -1; @@ -1177,7 +1166,7 @@ rk_getifaddrs(struct ifaddrs **ifap) #endif #if defined(HAVE_IPV6) && defined(SIOCGLIFCONF) && defined(SIOCGLIFFLAGS) if (ret) - ret = getlifaddrs2 (ifap, SIOCGLIFCONF, SIOCGLIFFLAGS, + ret = getlifaddrs2 (ifap, AF_INET6, SIOCGLIFCONF, SIOCGLIFFLAGS, sizeof(struct lifreq)); #endif #if defined(HAVE_IPV6) && defined(SIOCGIFCONF)