From: Daniel Stenberg Date: Mon, 4 Sep 2023 12:14:32 +0000 (+0200) Subject: transfer: also stop the sending on closed connection X-Git-Tag: curl-8_3_0~43 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=95a865b462195d9d847f7f2676f0c789179e2073;p=thirdparty%2Fcurl.git transfer: also stop the sending on closed connection Previously this cleared the receiving bit only but in some cases it is also still sending (like a request-body) when disconnected and neither direction can continue then. Fixes #11769 Reported-by: Oleg Jukovec Closes #11795 --- diff --git a/lib/transfer.c b/lib/transfer.c index fb0a6a45d9..d0602b8753 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -492,15 +492,16 @@ static CURLcode readwrite_data(struct Curl_easy *data, if(0 < nread || is_empty_data) { buf[nread] = 0; } - else { + if(!nread) { /* if we receive 0 or less here, either the data transfer is done or the server closed the connection and we bail out from this! */ if(data_eof_handled) DEBUGF(infof(data, "nread == 0, stream closed, bailing")); else DEBUGF(infof(data, "nread <= 0, server closed connection, bailing")); - k->keepon &= ~KEEP_RECV; - break; + k->keepon = 0; /* stop sending as well */ + if(!is_empty_data) + break; } /* Default buffer to use when we write the buffer, it may be changed