From 4bc597d27c56b20ec569ee85f37c268e3f4e1f14 Mon Sep 17 00:00:00 2001 From: Stefan Eissing Date: Thu, 13 Apr 2023 17:46:52 +0200 Subject: [PATCH] cf-socket: Disable socket receive buffer by default - Disable socket receive buffer unless USE_RECV_BEFORE_SEND_WORKAROUND is in place. While we would like to use the receive buffer, we have stalls in parallel transfers where not all buffered data is consumed and no socket events happen. Note USE_RECV_BEFORE_SEND_WORKAROUND is a Windows sockets workaround that has been disabled by default since b4b6e4f1, due to other bugs. Closes https://github.com/curl/curl/pull/10961 --- lib/cf-socket.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/cf-socket.c b/lib/cf-socket.c index 830daa1f54..dc6a40e906 100644 --- a/lib/cf-socket.c +++ b/lib/cf-socket.c @@ -1387,11 +1387,20 @@ static void cf_socket_active(struct Curl_cfilter *cf, struct Curl_easy *data) conn_set_primary_ip(cf, data); set_local_ip(cf, data); Curl_persistconninfo(data, cf->conn, ctx->l_ip, ctx->l_port); - /* We buffer only for TCP transfers that do not install their own - * read function. Those may still have expectations about socket - * behaviours from the past. */ + /* We buffer only for TCP transfers that do not install their own read + * function. Those may still have expectations about socket behaviours from + * the past. + * + * Note buffering is currently disabled by default because we have stalls + * in parallel transfers where not all buffered data is consumed and no + * socket events happen. + */ +#ifdef USE_RECV_BEFORE_SEND_WORKAROUND ctx->buffer_recv = (ctx->transport == TRNSPRT_TCP && (cf->conn->recv[cf->sockindex] == Curl_conn_recv)); +#else + ctx->buffer_recv = FALSE; +#endif } ctx->active = TRUE; }