diff options
Diffstat (limited to 'wg-dynamic-server.c')
-rw-r--r-- | wg-dynamic-server.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/wg-dynamic-server.c b/wg-dynamic-server.c index 77eb9a4..34fe9bc 100644 --- a/wg-dynamic-server.c +++ b/wg-dynamic-server.c @@ -543,13 +543,19 @@ int main(int argc, char *argv[]) } for (int i = 1; i < MAX_CONNECTIONS + 1; ++i) { + size_t off; + if (!(pollfds[i].revents & POLLOUT)) continue; pollfds[i].revents &= ~POLLOUT; - send_message(pollfds[i].fd, reqs[i - 1].buf, - &reqs[i - 1].buflen); - if (!reqs[i - 1].buflen) + + off = send_message(pollfds[i].fd, reqs[i - 1].buf, + &reqs[i - 1].buflen); + if (reqs[i - 1].buflen) + memmove(reqs[i - 1].buf, reqs[i - 1].buf + off, + reqs[i - 1].buflen); + else close_connection(&pollfds[i].fd, &reqs[i - 1]); } |