aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordberg.se>2019-04-24 16:05:49 +0200
committerLinus Nordberg <linus@nordberg.se>2019-04-24 16:05:49 +0200
commitfaa7108cd7183cda81ef0fa17e60c46ed14298a6 (patch)
tree7ff48744898051bfcf7f839075d43cbe33cfafc8
parentClean up forwardkey data a bit (diff)
downloadwg-dynamic-faa7108cd7183cda81ef0fa17e60c46ed14298a6.tar.xz
wg-dynamic-faa7108cd7183cda81ef0fa17e60c46ed14298a6.zip
Do advance buffer after (second) short write
-rw-r--r--wg-dynamic-client.c7
-rw-r--r--wg-dynamic-server.c10
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]);
}