yaid.c: Don't fail if either IPv4 or IPv6 is unavailable.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 17 Oct 2012 04:39:41 +0000 (05:39 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 18 Oct 2012 09:46:03 +0000 (10:46 +0100)
Do continue to fail if the ports can't be bound, or if neither protocol
is available.

yaid.c

diff --git a/yaid.c b/yaid.c
index 385ce38..affa522 100644 (file)
--- a/yaid.c
+++ b/yaid.c
@@ -621,6 +621,7 @@ static int make_listening_socket(int af, int port, const char *proto)
   size_t ssz;
 
   if ((fd = socket(af, SOCK_STREAM, 0)) < 0) {
+    if (errno == EAFNOSUPPORT) return (-1);
     die(1, "failed to create %s listening socket: %s",
        proto, strerror(errno));
   }
@@ -661,7 +662,7 @@ static int make_listening_socket(int af, int port, const char *proto)
   sel_initfile(&sel, &l->f, fd, SEL_READ, accept_client, l);
   sel_addfile(&l->f);
 
-  return (fd);
+  return (0);
 }
 
 int main(int argc, char *argv[])
@@ -691,8 +692,9 @@ int main(int argc, char *argv[])
     printf("ipv6 gw = %s\n", inet_ntop(AF_INET6, &a, buf, sizeof(buf)));
 
   sel_init(&sel);
-  make_listening_socket(AF_INET, port, "IPv4");
-  make_listening_socket(AF_INET6, port, "IPv6");
+  if (make_listening_socket(AF_INET, port, "IPv4") &&
+      make_listening_socket(AF_INET6, port, "IPv6"))
+    die(1, "no IP protocols supported");
 
   for (;;)
     if (sel_select(&sel)) die(1, "select failed: %s", strerror(errno));