From 1470cbd8d0457a053f4e42b02c302a296a61ed83 Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Thu, 7 Jan 2010 22:01:26 -0500 Subject: [PATCH] Fix the time we set of SO_REUSEADDR for listening sockets. src/ioset.c (ioset_listen): Linux -- reasonably -- requires that SO_REUSEADDR be set on a socket before binding it to an in-use socket. So do that. --- src/ioset.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ioset.c b/src/ioset.c index 30eb359..a7563d3 100644 --- a/src/ioset.c +++ b/src/ioset.c @@ -220,18 +220,18 @@ struct io_fd *ioset_listen(struct sockaddr *local, unsigned int sa_size, void *d } if (local && sa_size) { + opt = 1; + res = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt)); + if (res < 0) { + log_module(MAIN_LOG, LOG_WARNING, "Unable to mark listener address as re-usable: %s", strerror(errno)); + } + res = bind(fd, local, sa_size); if (res < 0) { log_module(MAIN_LOG, LOG_ERROR, "Unable to bind listening socket %d: %s", fd, strerror(errno)); close(fd); return NULL; } - - opt = 1; - res = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt)); - if (res < 0) { - log_module(MAIN_LOG, LOG_WARNING, "Unable to mark listener address as re-usable: %s", strerror(errno)); - } } res = listen(fd, 1); -- 2.20.1