]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
tests: Improve IPv6 detection for virNetSocket tests
authorMatthias Bolte <matthias.bolte@googlemail.com>
Fri, 24 Jun 2011 15:32:56 +0000 (17:32 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Fri, 24 Jun 2011 16:46:06 +0000 (18:46 +0200)
getifaddrs can return an IPv6 address, but getaddrinfo can fail
for an IPv6 address. Cover this combination.

tests/virnetsockettest.c

index f686a15c504fd846a44ba77cc65d65ef51336954..f6c72743c67975c6fd771a532e6e3e25c6d80c98 100644 (file)
@@ -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);