]> git.sur5r.net Git - bacula/bacula/commitdiff
Tweak connect error.
authorMarco van Wieringen <mvw@planets.elm.net>
Wed, 30 May 2012 14:15:36 +0000 (16:15 +0200)
committerKern Sibbald <kern@sibbald.com>
Sat, 20 Apr 2013 12:50:40 +0000 (14:50 +0200)
On lookup of a hostname we could get back both IPv4 and IPV6 addresses
for a given host. But we may only support IPV4 on the local host
and as such trying to create an IPV6 socket will fail. If we check
the return code of the socket call for EAFNOSUPPORT we catch such
an error and can continue trying to create a socket type that is
supported.

bacula/src/lib/bsock.c

index 845e63ecffb20c34b21836f7b4628f2b1cf2c9b1..891b10f3e4cfd4b30bf2ee8199a11b0e5d2ab581 100644 (file)
@@ -218,9 +218,21 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service,
       if ((sockfd = socket(ipaddr->get_family(), SOCK_STREAM, 0)) < 0) {
          berrno be;
          save_errno = errno;
-         *fatal = 1;
-         Pmsg3(000, _("Socket open error. proto=%d port=%d. ERR=%s\n"),
-            ipaddr->get_family(), ipaddr->get_port_host_order(), be.bstrerror());
+         switch (errno) {
+#ifdef EAFNOSUPPORT
+         case EAFNOSUPPORT:
+            /*
+             * The name lookup of the host returned an address in a protocol family
+             * we don't support. Suppress the error and try the next address.
+             */
+            break;
+#endif
+         default:
+            *fatal = 1;
+            Pmsg3(000, _("Socket open error. proto=%d port=%d. ERR=%s\n"),
+               ipaddr->get_family(), ipaddr->get_port_host_order(), be.bstrerror());
+            break;
+         }
          continue;
       }