diff options
author | Gregory Maxwell <greg@xiph.org> | 2015-10-21 23:52:29 +0000 |
---|---|---|
committer | Gregory Maxwell <greg@xiph.org> | 2015-10-22 17:57:48 +0000 |
commit | a4e28b3d1e5c95eb0c87f144851cd65048c3e0bc (patch) | |
tree | 75863cc33e53fef354777cb7b9f206736c805201 /src/net.cpp | |
parent | 0fbfc5106cd9866325b4a1ab3b9db8e91e54f070 (diff) | |
download | bitcoin-a4e28b3d1e5c95eb0c87f144851cd65048c3e0bc.tar.xz |
Set TCP_NODELAY on P2P sockets.
Nagle appears to be a significant contributor to latency now that the static
sleeps are gone. Most of our messages are relatively large compared to
IP + TCP so I do not expect this to create enormous overhead.
This may also reduce traffic burstyness somewhat.
Diffstat (limited to 'src/net.cpp')
-rw-r--r-- | src/net.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/net.cpp b/src/net.cpp index 87c4f0af0a..58b946f4a1 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -963,6 +963,15 @@ static void AcceptConnection(const ListenSocket& hListenSocket) { return; } + // According to the internet TCP_NODELAY is not carried into accepted sockets + // on all platforms. Set it again here just to be sure. + int set = 1; +#ifdef WIN32 + setsockopt(hSocket, IPPROTO_TCP, TCP_NODELAY, (const char*)&set, sizeof(int)); +#else + setsockopt(hSocket, IPPROTO_TCP, TCP_NODELAY, (void*)&set, sizeof(int)); +#endif + if (CNode::IsBanned(addr) && !whitelisted) { LogPrintf("connection from %s dropped (banned)\n", addr.ToString()); @@ -1790,8 +1799,11 @@ bool BindListenPort(const CService &addrBind, string& strError, bool fWhiteliste // Allow binding if the port is still in TIME_WAIT state after // the program was closed and restarted. setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (void*)&nOne, sizeof(int)); + // Disable Nagle's algorithm + setsockopt(hListenSocket, IPPROTO_TCP, TCP_NODELAY, (void*)&nOne, sizeof(int)); #else setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&nOne, sizeof(int)); + setsockopt(hListenSocket, IPPROTO_TCP, TCP_NODELAY, (const char*)&nOne, sizeof(int)); #endif // Set to non-blocking, incoming connections will also inherit this |