aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordberg.se>2019-02-26 15:26:27 +0100
committerLinus Nordberg <linus@nordberg.se>2019-02-26 15:26:27 +0100
commit5f78dc70efa2824add4560da82e9bba7ef67fb2e (patch)
tree2adfe6ebb54b1ec0f374670dd4ff403b61fce320
parentDon't read socket after close due to write done (diff)
downloadwg-dynamic-5f78dc70efa2824add4560da82e9bba7ef67fb2e.tar.xz
wg-dynamic-5f78dc70efa2824add4560da82e9bba7ef67fb2e.zip
Enter the write block only when the outbuf is set
-rw-r--r--wg-dynamic-server.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/wg-dynamic-server.c b/wg-dynamic-server.c
index 0f4c296..7a4dd5e 100644
--- a/wg-dynamic-server.c
+++ b/wg-dynamic-server.c
@@ -342,14 +342,12 @@ int main(int argc, char *argv[])
continue;
pollfds[i].revents &= ~POLLOUT;
- if (reqs[i - 1].buf
- && send_message(pollfds[i].fd, reqs[i - 1].buf,
- &reqs[i - 1].buflen)) {
+ if (send_message(pollfds[i].fd, reqs[i - 1].buf,
+ &reqs[i - 1].buflen)) {
close_connection(&pollfds[i].fd, &reqs[i - 1]);
+ pollfds[i].events &= ~POLLOUT;
continue;
}
- else
- pollfds[i].events |= POLLOUT;
}
for (int i = 1; i < MAX_CONNECTIONS + 1; ++i) {
@@ -360,7 +358,7 @@ int main(int argc, char *argv[])
if (handle_request(pollfds[i].fd, &reqs[i - 1],
send_response, send_error))
close_connection(&pollfds[i].fd, &reqs[i - 1]);
- else
+ else if (reqs[i - 1].buf)
pollfds[i].events |= POLLOUT;
}
}