http2: set TCP_NODELAY unconditionally
For a single-stream download from localhost, we managed to increase transfer speed from 1.6MB/sec to around 400MB/sec, mostly because of this single fix.
This commit is contained in:
parent
46ad4f7f93
commit
af90becf4b
@ -857,12 +857,11 @@ CURLcode Curl_is_connected(struct connectdata *conn,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tcpnodelay(struct connectdata *conn,
|
void Curl_tcpnodelay(struct connectdata *conn, curl_socket_t sockfd)
|
||||||
curl_socket_t sockfd)
|
|
||||||
{
|
{
|
||||||
#ifdef TCP_NODELAY
|
#ifdef TCP_NODELAY
|
||||||
struct SessionHandle *data= conn->data;
|
struct SessionHandle *data= conn->data;
|
||||||
curl_socklen_t onoff = (curl_socklen_t) data->set.tcp_nodelay;
|
curl_socklen_t onoff = (curl_socklen_t) 1;
|
||||||
int level = IPPROTO_TCP;
|
int level = IPPROTO_TCP;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -1033,7 +1032,7 @@ static CURLcode singleipconnect(struct connectdata *conn,
|
|||||||
is_tcp = (addr.family == AF_INET) && addr.socktype == SOCK_STREAM;
|
is_tcp = (addr.family == AF_INET) && addr.socktype == SOCK_STREAM;
|
||||||
#endif
|
#endif
|
||||||
if(is_tcp && data->set.tcp_nodelay)
|
if(is_tcp && data->set.tcp_nodelay)
|
||||||
tcpnodelay(conn, sockfd);
|
Curl_tcpnodelay(conn, sockfd);
|
||||||
|
|
||||||
nosigpipe(conn, sockfd);
|
nosigpipe(conn, sockfd);
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -102,6 +102,8 @@ CURLcode Curl_socket(struct connectdata *conn,
|
|||||||
struct Curl_sockaddr_ex *addr,
|
struct Curl_sockaddr_ex *addr,
|
||||||
curl_socket_t *sockfd);
|
curl_socket_t *sockfd);
|
||||||
|
|
||||||
|
void Curl_tcpnodelay(struct connectdata *conn, curl_socket_t sockfd);
|
||||||
|
|
||||||
#ifdef CURLDEBUG
|
#ifdef CURLDEBUG
|
||||||
/*
|
/*
|
||||||
* Curl_connclose() sets the bit.close bit to TRUE with an explanation.
|
* Curl_connclose() sets the bit.close bit to TRUE with an explanation.
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "multiif.h"
|
#include "multiif.h"
|
||||||
#include "conncache.h"
|
#include "conncache.h"
|
||||||
#include "url.h"
|
#include "url.h"
|
||||||
|
#include "connect.h"
|
||||||
|
|
||||||
/* The last #include files should be: */
|
/* The last #include files should be: */
|
||||||
#include "curl_memory.h"
|
#include "curl_memory.h"
|
||||||
@ -1441,6 +1442,10 @@ CURLcode Curl_http2_setup(struct connectdata *conn)
|
|||||||
infof(conn->data, "Connection state changed (HTTP/2 confirmed)\n");
|
infof(conn->data, "Connection state changed (HTTP/2 confirmed)\n");
|
||||||
Curl_multi_connchanged(conn->data->multi);
|
Curl_multi_connchanged(conn->data->multi);
|
||||||
|
|
||||||
|
/* switch on TCP_NODELAY as we need to send off packets without delay for
|
||||||
|
maximum throughput */
|
||||||
|
Curl_tcpnodelay(conn, conn->sock[FIRSTSOCKET]);
|
||||||
|
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user