Browse Source

[net] Added SetSocketNoDelay() utility function

0.15
Thomas Snider 8 years ago
parent
commit
ad415bc16a
  1. 7
      src/net.cpp
  2. 15
      src/netbase.cpp
  3. 2
      src/netbase.h

7
src/net.cpp

@ -1069,12 +1069,7 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
// According to the internet TCP_NODELAY is not carried into accepted sockets // According to the internet TCP_NODELAY is not carried into accepted sockets
// on all platforms. Set it again here just to be sure. // on all platforms. Set it again here just to be sure.
int set = 1; SetSocketNoDelay(hSocket);
#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 (IsBanned(addr) && !whitelisted) if (IsBanned(addr) && !whitelisted)
{ {

15
src/netbase.cpp

@ -428,18 +428,14 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
if (hSocket == INVALID_SOCKET) if (hSocket == INVALID_SOCKET)
return false; return false;
int set = 1;
#ifdef SO_NOSIGPIPE #ifdef SO_NOSIGPIPE
int set = 1;
// Different way of disabling SIGPIPE on BSD // Different way of disabling SIGPIPE on BSD
setsockopt(hSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int)); setsockopt(hSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int));
#endif #endif
//Disable Nagle's algorithm //Disable Nagle's algorithm
#ifdef WIN32 SetSocketNoDelay(hSocket);
setsockopt(hSocket, IPPROTO_TCP, TCP_NODELAY, (const char*)&set, sizeof(int));
#else
setsockopt(hSocket, IPPROTO_TCP, TCP_NODELAY, (void*)&set, sizeof(int));
#endif
// Set to non-blocking // Set to non-blocking
if (!SetSocketNonBlocking(hSocket, true)) if (!SetSocketNonBlocking(hSocket, true))
@ -728,6 +724,13 @@ bool SetSocketNonBlocking(SOCKET& hSocket, bool fNonBlocking)
return true; return true;
} }
bool SetSocketNoDelay(SOCKET& hSocket)
{
int set = 1;
int rc = setsockopt(hSocket, IPPROTO_TCP, TCP_NODELAY, (const char*)&set, sizeof(int));
return rc == 0;
}
void InterruptSocks5(bool interrupt) void InterruptSocks5(bool interrupt)
{ {
interruptSocks5Recv = interrupt; interruptSocks5Recv = interrupt;

2
src/netbase.h

@ -59,6 +59,8 @@ std::string NetworkErrorString(int err);
bool CloseSocket(SOCKET& hSocket); bool CloseSocket(SOCKET& hSocket);
/** Disable or enable blocking-mode for a socket */ /** Disable or enable blocking-mode for a socket */
bool SetSocketNonBlocking(SOCKET& hSocket, bool fNonBlocking); bool SetSocketNonBlocking(SOCKET& hSocket, bool fNonBlocking);
/** Set the TCP_NODELAY flag on a socket */
bool SetSocketNoDelay(SOCKET& hSocket);
/** /**
* Convert milliseconds to a struct timeval for e.g. select. * Convert milliseconds to a struct timeval for e.g. select.
*/ */

Loading…
Cancel
Save