From a20696ca1a330c7dc11424dd65a4dd13db4f19af Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Wed, 17 Oct 2012 05:39:41 +0100 Subject: [PATCH] yaid.c: Don't fail if either IPv4 or IPv6 is unavailable. Do continue to fail if the ports can't be bound, or if neither protocol is available. --- yaid.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/yaid.c b/yaid.c index 385ce38..affa522 100644 --- 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)); -- 2.11.0