From eddceda2f3815aa9e46de621b7e495625d3d6a43 Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Sun, 22 Jul 2012 12:04:16 -0500 Subject: [PATCH] Fix test failure when no IPv6 is avail When the system doesn't have IPv6 available (e.g. not built into the kernel or the module isn't loaded), you can not create an IPv6 socket. The test determines earlier on that IPv6 isn't available then goes and creates a socket. This makes socket creation conditional on IPv6 availability. (cherry picked from commit faffe26909d8e5cde7e80e5a8f33296ed56dcfc7) --- tests/virnetsockettest.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/tests/virnetsockettest.c b/tests/virnetsockettest.c index 204113e418..33c6fd4327 100644 --- a/tests/virnetsockettest.c +++ b/tests/virnetsockettest.c @@ -90,11 +90,13 @@ checkProtocols(bool *hasIPv4, bool *hasIPv6, if ((s4 = socket(AF_INET, SOCK_STREAM, 0)) < 0) goto cleanup; - if ((s6 = socket(AF_INET6, SOCK_STREAM, 0)) < 0) - goto cleanup; + if (*hasIPv6) { + if ((s6 = socket(AF_INET6, SOCK_STREAM, 0)) < 0) + goto cleanup; - if (setsockopt(s6, IPPROTO_IPV6, IPV6_V6ONLY, &only, sizeof(only)) < 0) - goto cleanup; + if (setsockopt(s6, IPPROTO_IPV6, IPV6_V6ONLY, &only, sizeof(only)) < 0) + goto cleanup; + } memset(&in4, 0, sizeof(in4)); memset(&in6, 0, sizeof(in6)); @@ -114,13 +116,16 @@ checkProtocols(bool *hasIPv4, bool *hasIPv6, } goto cleanup; } - if (bind(s6, (struct sockaddr *)&in6, sizeof(in6)) < 0) { - if (errno == EADDRINUSE) { - VIR_FORCE_CLOSE(s4); - VIR_FORCE_CLOSE(s6); - continue; + + if (*hasIPv6) { + if (bind(s6, (struct sockaddr *)&in6, sizeof(in6)) < 0) { + if (errno == EADDRINUSE) { + VIR_FORCE_CLOSE(s4); + VIR_FORCE_CLOSE(s6); + continue; + } + goto cleanup; } - goto cleanup; } *freePort = BASE_PORT + i;