Fix net_send_all()
On partial writes, the final result was the number of bytes written by the last send() rather than the total.
This commit is contained in:
parent
daf90d33d5
commit
6f03022646
1 changed files with 4 additions and 2 deletions
|
@ -99,16 +99,18 @@ net_send(socket_t socket, const void *buf, size_t len) {
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
net_send_all(socket_t socket, const void *buf, size_t len) {
|
net_send_all(socket_t socket, const void *buf, size_t len) {
|
||||||
|
size_t copied = 0;
|
||||||
ssize_t w = 0;
|
ssize_t w = 0;
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
w = send(socket, buf, len, 0);
|
w = send(socket, buf, len, 0);
|
||||||
if (w == -1) {
|
if (w == -1) {
|
||||||
return -1;
|
return copied ? (ssize_t) copied : -1;
|
||||||
}
|
}
|
||||||
len -= w;
|
len -= w;
|
||||||
buf = (char *) buf + w;
|
buf = (char *) buf + w;
|
||||||
|
copied += w;
|
||||||
}
|
}
|
||||||
return w;
|
return copied;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
Loading…
Reference in a new issue