Restored the code in the IPV6_V6ONLY section that checks the
authorWayne Davison <wayned@samba.org>
Sun, 20 Jun 2004 19:51:19 +0000 (19:51 +0000)
committerWayne Davison <wayned@samba.org>
Sun, 20 Jun 2004 19:51:19 +0000 (19:51 +0000)
return value from setsockopt() with one improvement:  if the
user has used --ipv6 (-6) we don't discard the IPv6 socket.
This should help people using older Linux kernels that don't
implement IPv6 support quite right.

socket.c

index 549d40d..29fb2dc 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -369,8 +369,12 @@ static int *open_socket_in(int type, int port, const char *bind_address,
 
 #ifdef IPV6_V6ONLY
                if (resp->ai_family == AF_INET6) {
-                       setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
-                                  (char *)&one, sizeof one);
+                       if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
+                                      (char *)&one, sizeof one) < 0
+                           && default_af_hint != AF_INET6) {
+                               close(s);
+                               continue;
+                       }
                }
 #endif