From 2a83d925d7251acf40776c5eb545a98a9313ae7c Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 1 Dec 2014 16:31:35 +0000 Subject: [PATCH] Only set SO_REUSEADDR on the listening fd --- quark.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/quark.c b/quark.c index 08a8668..8ee9969 100644 --- a/quark.c +++ b/quark.c @@ -514,7 +514,7 @@ invalid_request: void serve(int fd) { - int result, optval; + int result; struct timeval tv; socklen_t salen; struct sockaddr sa; @@ -541,11 +541,6 @@ serve(int fd) host, sizeof host); break; } - /* bind: re-use address */ - optval = 1; - if (setsockopt(req.fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) - logerrmsg("error\tsetsockopt SO_REUSEADDR failed: %s\n", - strerror(errno)); /* If we haven't received any data within this period, close the * socket to avoid spamming the process table */ @@ -600,7 +595,7 @@ main(int argc, char *argv[]) struct passwd *upwd = NULL; struct group *gpwd = NULL; struct rlimit rlim; - int i, docrootlen; + int i, docrootlen, optval; ARGBEGIN { case 'c': @@ -679,6 +674,12 @@ main(int argc, char *argv[]) logerrmsg("error\tsocket: %s\n", strerror(errno)); goto err; } + + optval = 1; + if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) + logerrmsg("error\tsetsockopt SO_REUSEADDR failed: %s\n", + strerror(errno)); + if (bind(listenfd, ai->ai_addr, ai->ai_addrlen) == -1) { logerrmsg("error\tbind: %s\n", strerror(errno)); goto err;