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
This commit is contained in:
Stefan Eissing 2023-04-13 17:46:52 +02:00 committed by Jay Satiro
parent 43d7ccd03d
commit 4bc597d27c

View File

@ -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;
}