Fix net_send_all()
On partial writes, the final result was the number of bytes written by
the last send() rather than the total.
@@ -99,16 +99,18 @@ net_send(socket_t socket, const void *buf, size_t len) {
ssize_t
net_send_all(socket_t socket, const void *buf, size_t len) {
+ size_t copied = 0;
ssize_t w = 0;
while (len > 0) {
w = send(socket, buf, len, 0);
if (w == -1) {
- return -1;
+ return copied ? (ssize_t) copied : -1;
}
len -= w;
buf = (char *) buf + w;
+ copied += w;
}
- return w;
+ return copied;
}
bool
