aboutsummaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'config.c')
-rw-r--r--config.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/config.c b/config.c
index 14fe63e..8fb9b7d 100644
--- a/config.c
+++ b/config.c
@@ -200,7 +200,9 @@ config_setserver(struct httpd *env, struct server *srv)
n = -1;
proc_range(ps, id, &n, &m);
for (n = 0; n < m; n++) {
- if ((fd = dup(srv->srv_s)) == -1)
+ if (srv->srv_s == -1)
+ fd = -1;
+ else if ((fd = dup(srv->srv_s)) == -1)
return (-1);
proc_composev_imsg(ps, id, n,
IMSG_CFG_SERVER, fd, iov, c);
@@ -211,9 +213,6 @@ config_setserver(struct httpd *env, struct server *srv)
}
}
- close(srv->srv_s);
- srv->srv_s = -1;
-
return (0);
}
@@ -356,8 +355,12 @@ config_getserver(struct httpd *env, struct imsg *imsg)
if ((srv = server_byaddr((struct sockaddr *)
&srv_conf.ss, srv_conf.port)) != NULL) {
/* Add "host" to existing listening server */
- if (imsg->fd != -1)
- close(imsg->fd);
+ if (imsg->fd != -1) {
+ if (srv->srv_s == -1)
+ srv->srv_s = imsg->fd;
+ else
+ close(imsg->fd);
+ }
return (config_getserver_config(env, srv, imsg));
}