commit 2a83d925d7251acf40776c5eb545a98a9313ae7c
Author: sin <[email protected]>
Date: Mon Dec 1 16:31:35 2014 +0000
Only set SO_REUSEADDR on the listening fd
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;