aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jelinski <daniel.jelinski@thomsonreuters.com>2018-07-19 14:07:59 +0200
committerDaniel Stenberg <daniel@haxx.se>2018-08-08 13:38:50 +0200
commit1ba1dba76a8898d1de4dfbc9f1910a352d8a9dab (patch)
tree1feb3c520ccbbf1b5a36b38595f57bd61507544b
parent298d2565e2a2f06a859b7f5a1cc24ba7c87a8ce2 (diff)
windows: implement send buffer tuning
Significantly enhances upload performance on modern Windows versions. Bug: https://curl.haxx.se/mail/lib-2018-07/0080.html Closes #2762 Fixes #2224
-rw-r--r--lib/transfer.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/transfer.c b/lib/transfer.c
index 43f567c4f..1d33e861a 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -869,6 +869,22 @@ static CURLcode done_sending(struct connectdata *conn,
return CURLE_OK;
}
+#if defined(WIN32) && defined(SIO_IDEAL_SEND_BACKLOG_QUERY)
+static void win_update_buffer_size(curl_socket_t sockfd)
+{
+ int result;
+ ULONG ideal;
+ DWORD ideallen;
+ result = WSAIoctl(sockfd, SIO_IDEAL_SEND_BACKLOG_QUERY, 0, 0,
+ &ideal, sizeof(ideal), &ideallen, 0, 0);
+ if(result == 0) {
+ setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF,
+ (const char *)&ideal, sizeof(ideal));
+ }
+}
+#else
+#define win_update_buffer_size(x)
+#endif
/*
* Send data to upload to the server, when the socket is writable.
@@ -1020,10 +1036,11 @@ static CURLcode readwrite_upload(struct Curl_easy *data,
k->upload_fromhere, /* buffer pointer */
k->upload_present, /* buffer size */
&bytes_written); /* actually sent */
-
if(result)
return result;
+ win_update_buffer_size(conn->writesockfd);
+
if(data->set.verbose)
/* show the data before we change the pointer upload_fromhere */
Curl_debug(data, CURLINFO_DATA_OUT, k->upload_fromhere,