diff options
author | Linus Nordberg <linus@nordberg.se> | 2019-04-24 16:05:49 +0200 |
---|---|---|
committer | Linus Nordberg <linus@nordberg.se> | 2019-04-24 16:05:49 +0200 |
commit | faa7108cd7183cda81ef0fa17e60c46ed14298a6 (patch) | |
tree | 7ff48744898051bfcf7f839075d43cbe33cfafc8 | |
parent | Clean up forwardkey data a bit (diff) | |
download | wg-dynamic-faa7108cd7183cda81ef0fa17e60c46ed14298a6.tar.xz wg-dynamic-faa7108cd7183cda81ef0fa17e60c46ed14298a6.zip |
Do advance buffer after (second) short write
-rw-r--r-- | wg-dynamic-client.c | 7 | ||||
-rw-r--r-- | wg-dynamic-server.c | 10 |
2 files changed, 12 insertions, 5 deletions
diff --git a/wg-dynamic-client.c b/wg-dynamic-client.c index fe95383..8a1fecb 100644 --- a/wg-dynamic-client.c +++ b/wg-dynamic-client.c @@ -507,8 +507,11 @@ int main(int argc __attribute__((unused)), char *argv[] __attribute__((unused))) pollfds[0].revents &= ~POLLOUT; debug("sending, trying again with %lu bytes\n", req.buflen); - send_message(pollfds[0].fd, req.buf, &req.buflen); - if (!req.buflen) + size_t w = send_message(pollfds[0].fd, req.buf, + &req.buflen); + if (req.buflen) + memmove(req.buf, req.buf + w, req.buflen); + else close_connection(&pollfds[0].fd, &req); } diff --git a/wg-dynamic-server.c b/wg-dynamic-server.c index f6da8c7..295a127 100644 --- a/wg-dynamic-server.c +++ b/wg-dynamic-server.c @@ -559,9 +559,13 @@ int main(int argc, char *argv[]) continue; pollfds[i].revents &= ~POLLOUT; - send_message(pollfds[i].fd, reqs[i - 1].buf, - &reqs[i - 1].buflen); - if (!reqs[i - 1].buflen) + + size_t w = 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 + w, + reqs[i - 1].buflen); + else close_connection(&pollfds[i].fd, &reqs[i - 1]); } |