aboutsummaryrefslogtreecommitdiffstats
path: root/wg-dynamic-server.c
diff options
context:
space:
mode:
Diffstat (limited to 'wg-dynamic-server.c')
-rw-r--r--wg-dynamic-server.c12
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]);
}