From d772167f6d757f283d819f7860b8e7d18b6ed861 Mon Sep 17 00:00:00 2001 From: Matthias Bolte Date: Fri, 24 Jun 2011 17:32:56 +0200 Subject: [PATCH] tests: Improve IPv6 detection for virNetSocket tests getifaddrs can return an IPv6 address, but getaddrinfo can fail for an IPv6 address. Cover this combination. --- tests/virnetsockettest.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/virnetsockettest.c b/tests/virnetsockettest.c index f686a15c50..f6c72743c6 100644 --- a/tests/virnetsockettest.c +++ b/tests/virnetsockettest.c @@ -45,12 +45,16 @@ checkProtocols(bool *hasIPv4, bool *hasIPv6, int *freePort) { struct ifaddrs *ifaddr = NULL, *ifa; + struct addrinfo hints; + struct addrinfo *ai = NULL; struct sockaddr_in in4; struct sockaddr_in6 in6; int s4 = -1, s6 = -1; int i; int ret = -1; + memset(&hints, 0, sizeof hints); + *hasIPv4 = *hasIPv6 = false; *freePort = 0; @@ -67,6 +71,15 @@ checkProtocols(bool *hasIPv4, bool *hasIPv6, *hasIPv6 = true; } + hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG; + hints.ai_family = AF_INET6; + hints.ai_socktype = SOCK_STREAM; + + if (getaddrinfo("::1", "5672", &hints, &ai) != 0) + *hasIPv6 = false; + + freeaddrinfo(ai); + VIR_DEBUG("Protocols: v4 %d v6 %d\n", *hasIPv4, *hasIPv6); freeifaddrs(ifaddr);