quark

quark web server
git clone git://git.suckless.org/quark
Log | Files | Refs | LICENSE

commit 2a83d925d7251acf40776c5eb545a98a9313ae7c
parent b017f90846947a2bcddc7ae2b0fbd9c8252e44a8
Author: sin <sin@2f30.org>
Date:   Mon,  1 Dec 2014 16:31:35 +0000

Only set SO_REUSEADDR on the listening fd

Diffstat:
Mquark.c | 15++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)

diff --git 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;