diff options
author | Vasil Dimov <vd@FreeBSD.org> | 2021-04-13 13:28:10 +0200 |
---|---|---|
committer | Vasil Dimov <vd@FreeBSD.org> | 2022-04-15 09:19:05 +0200 |
commit | d65b6c3fb9cdd41fa53bc76a7b8f49aaa089b0bc (patch) | |
tree | ab7e33d37667006f23548f521eacfa2717fee8aa /src/netbase.cpp | |
parent | 184e56d6683d05fc84f5153cfff83a2e32883556 (diff) |
net: use Sock::SetSockOpt() instead of setsockopt()
Diffstat (limited to 'src/netbase.cpp')
-rw-r--r-- | src/netbase.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/netbase.cpp b/src/netbase.cpp index e6d4f16ba0..0860851678 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -499,10 +499,11 @@ std::unique_ptr<Sock> CreateSockTCP(const CService& address_family) return nullptr; } + auto sock = std::make_unique<Sock>(hSocket); + // Ensure that waiting for I/O on this socket won't result in undefined // behavior. - if (!IsSelectableSocket(hSocket)) { - CloseSocket(hSocket); + if (!IsSelectableSocket(sock->Get())) { LogPrintf("Cannot create connection: non-selectable socket created (fd >= FD_SETSIZE ?)\n"); return nullptr; } @@ -511,19 +512,21 @@ std::unique_ptr<Sock> CreateSockTCP(const CService& address_family) int set = 1; // Set the no-sigpipe option on the socket for BSD systems, other UNIXes // should use the MSG_NOSIGNAL flag for every send. - setsockopt(hSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int)); + if (sock->SetSockOpt(SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int)) == SOCKET_ERROR) { + LogPrintf("Error setting SO_NOSIGPIPE on socket: %s, continuing anyway\n", + NetworkErrorString(WSAGetLastError())); + } #endif // Set the no-delay option (disable Nagle's algorithm) on the TCP socket. - SetSocketNoDelay(hSocket); + SetSocketNoDelay(sock->Get()); // Set the non-blocking option on the socket. - if (!SetSocketNonBlocking(hSocket)) { - CloseSocket(hSocket); + if (!SetSocketNonBlocking(sock->Get())) { LogPrintf("Error setting socket to non-blocking: %s\n", NetworkErrorString(WSAGetLastError())); return nullptr; } - return std::make_unique<Sock>(hSocket); + return sock; } std::function<std::unique_ptr<Sock>(const CService&)> CreateSock = CreateSockTCP; |