From f9624813aff019f95e370524152d130d22ee37f3 Mon Sep 17 00:00:00 2001 From: antirez Date: Fri, 9 Sep 2016 14:59:48 +0200 Subject: fix the fix for the TCP binding. This commit attempts to fix a problem with PR #3467. --- src/server.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/server.c b/src/server.c index fe8364d00..c737a470f 100644 --- a/src/server.c +++ b/src/server.c @@ -1644,19 +1644,24 @@ int listenToPort(int port, int *fds, int *count) { if (fds[*count] != ANET_ERR) { anetNonBlock(NULL,fds[*count]); (*count)++; - } else if (errno == EAFNOSUPPORT) + } else if (errno == EAFNOSUPPORT) { unsupported++; + serverLog(LL_WARNING,"Not listening to IPv6: unsupproted"); + } - /* Bind the IPv4 address as well. */ - fds[*count] = anetTcpServer(server.neterr,port,NULL, - server.tcp_backlog); - if (fds[*count] != ANET_ERR) { - anetNonBlock(NULL,fds[*count]); - (*count)++; - } else if (errno == EAFNOSUPPORT) - unsupported++; + if (*count == 1 || unsupported) { + /* Bind the IPv4 address as well. */ + fds[*count] = anetTcpServer(server.neterr,port,NULL, + server.tcp_backlog); + if (fds[*count] != ANET_ERR) { + anetNonBlock(NULL,fds[*count]); + (*count)++; + } else if (errno == EAFNOSUPPORT) { + unsupported++; + serverLog(LL_WARNING,"Not listening to IPv4: unsupproted"); + } + } /* Exit the loop if we were able to bind * on IPv4 and IPv6, - * or if one is unsupported by th OS. * otherwise fds[*count] will be ANET_ERR and we'll print an * error and return to the caller with an error. */ if (*count + unsupported == 2) break; -- cgit v1.2.1