diff --git a/server.c b/server.c index ab18f473..822c2751 100644 --- a/server.c +++ b/server.c @@ -4850,7 +4850,8 @@ handle_tcp_writing(int fd, short event, void* arg) } #ifdef HAVE_WRITEV - sent -= sizeof(n_tcplen); + /* The number of bytes transmitted for the message content. */ + sent = data->bytes_transmitted - sizeof(n_tcplen); /* handle potential 'packet done' code */ goto packet_could_be_done; #endif diff --git a/xfrd-tcp.c b/xfrd-tcp.c index acea5e2d..5f3abb51 100644 --- a/xfrd-tcp.c +++ b/xfrd-tcp.c @@ -1252,8 +1252,8 @@ int conn_write(struct xfrd_tcp* tcp) } tcp->total_bytes += sent; - if(sent > (ssize_t)sizeof(tcp->msglen)) - buffer_skip(tcp->packet, sent-sizeof(tcp->msglen)); + if(tcp->total_bytes > (ssize_t)sizeof(tcp->msglen)) + buffer_skip(tcp->packet, tcp->total_bytes-sizeof(tcp->msglen)); if(tcp->total_bytes < sizeof(tcp->msglen)) { /* incomplete write, resume later */ return 0; -- 2.54.0