From a2c4a7acd1dfb2fb7e3c9dac6b3d8c9354b2e0a6 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Tue, 13 Apr 2021 14:01:44 +0200 Subject: net: use Sock::SetSockOpt() instead of standalone SetSocketNoDelay() Since the former is mockable, this makes it easier to test higher level code that sets the TCP_NODELAY flag. --- src/net.cpp | 6 +++++- src/netbase.cpp | 12 ++++-------- src/netbase.h | 2 -- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 9a2c565b7d..5a0c057c3e 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1190,7 +1190,11 @@ void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr&& sock, // According to the internet TCP_NODELAY is not carried into accepted sockets // on all platforms. Set it again here just to be sure. - SetSocketNoDelay(sock->Get()); + const int on{1}; + if (sock->SetSockOpt(IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) == SOCKET_ERROR) { + LogPrint(BCLog::NET, "connection from %s: unable to set TCP_NODELAY, continuing anyway\n", + addr.ToString()); + } // Don't accept connections from banned peers. bool banned = m_banman && m_banman->IsBanned(addr); diff --git a/src/netbase.cpp b/src/netbase.cpp index 0860851678..9557297df1 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -519,7 +519,10 @@ std::unique_ptr CreateSockTCP(const CService& address_family) #endif // Set the no-delay option (disable Nagle's algorithm) on the TCP socket. - SetSocketNoDelay(sock->Get()); + const int on{1}; + if (sock->SetSockOpt(IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) == SOCKET_ERROR) { + LogPrint(BCLog::NET, "Unable to set TCP_NODELAY on a newly created socket, continuing anyway\n"); + } // Set the non-blocking option on the socket. if (!SetSocketNonBlocking(sock->Get())) { @@ -729,13 +732,6 @@ bool SetSocketNonBlocking(const SOCKET& hSocket) return true; } -bool SetSocketNoDelay(const 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) { interruptSocks5Recv = interrupt; diff --git a/src/netbase.h b/src/netbase.h index c226e6b73d..bf7522210d 100644 --- a/src/netbase.h +++ b/src/netbase.h @@ -223,8 +223,6 @@ bool ConnectThroughProxy(const Proxy& proxy, const std::string& strDest, uint16_ /** Enable non-blocking mode for a socket */ bool SetSocketNonBlocking(const SOCKET& hSocket); -/** Set the TCP_NODELAY flag on a socket */ -bool SetSocketNoDelay(const SOCKET& hSocket); void InterruptSocks5(bool interrupt); /** -- cgit v1.2.3