mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 20:42:59 +01:00
net: use CreateSocket for binds
This commit is contained in:
parent
df3bcf89e4
commit
3830b6e065
25
src/net.cpp
25
src/net.cpp
@ -2078,44 +2078,21 @@ bool CConnman::BindListenPort(const CService &addrBind, std::string& strError, b
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SOCKET hListenSocket = socket(((struct sockaddr*)&sockaddr)->sa_family, SOCK_STREAM, IPPROTO_TCP);
|
SOCKET hListenSocket = CreateSocket(addrBind);
|
||||||
if (hListenSocket == INVALID_SOCKET)
|
if (hListenSocket == INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
strError = strprintf("Error: Couldn't open socket for incoming connections (socket returned error %s)", NetworkErrorString(WSAGetLastError()));
|
strError = strprintf("Error: Couldn't open socket for incoming connections (socket returned error %s)", NetworkErrorString(WSAGetLastError()));
|
||||||
LogPrintf("%s\n", strError);
|
LogPrintf("%s\n", strError);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!IsSelectableSocket(hListenSocket))
|
|
||||||
{
|
|
||||||
strError = "Error: Couldn't create a listenable socket for incoming connections";
|
|
||||||
LogPrintf("%s\n", strError);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
#ifdef SO_NOSIGPIPE
|
|
||||||
// Different way of disabling SIGPIPE on BSD
|
|
||||||
setsockopt(hListenSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&nOne, sizeof(int));
|
|
||||||
#endif
|
|
||||||
// Allow binding if the port is still in TIME_WAIT state after
|
// Allow binding if the port is still in TIME_WAIT state after
|
||||||
// the program was closed and restarted.
|
// the program was closed and restarted.
|
||||||
setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (void*)&nOne, sizeof(int));
|
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
|
#else
|
||||||
setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&nOne, sizeof(int));
|
setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&nOne, sizeof(int));
|
||||||
setsockopt(hListenSocket, IPPROTO_TCP, TCP_NODELAY, (const char*)&nOne, sizeof(int));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Set to non-blocking, incoming connections will also inherit this
|
|
||||||
if (!SetSocketNonBlocking(hListenSocket, true)) {
|
|
||||||
CloseSocket(hListenSocket);
|
|
||||||
strError = strprintf("BindListenPort: Setting listening socket to non-blocking failed, error %s\n", NetworkErrorString(WSAGetLastError()));
|
|
||||||
LogPrintf("%s\n", strError);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// some systems don't have IPV6_V6ONLY but are always v6only; others do have the option
|
// some systems don't have IPV6_V6ONLY but are always v6only; others do have the option
|
||||||
// and enable it by default or not. Try to enable it, if possible.
|
// and enable it by default or not. Try to enable it, if possible.
|
||||||
if (addrBind.IsIPv6()) {
|
if (addrBind.IsIPv6()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user