@ -36,6 +36,17 @@
@@ -36,6 +36,17 @@
# define MSG_NOSIGNAL 0
# endif
// Fix for ancient MinGW versions, that don't have defined these in ws2tcpip.h.
// Todo: Can be removed when our pull-tester is upgraded to a modern MinGW version.
# ifdef WIN32
# ifndef PROTECTION_LEVEL_UNRESTRICTED
# define PROTECTION_LEVEL_UNRESTRICTED 10
# endif
# ifndef IPV6_PROTECTION_LEVEL
# define IPV6_PROTECTION_LEVEL 23
# endif
# endif
using namespace std ;
using namespace boost ;
@ -1587,18 +1598,16 @@ bool BindListenPort(const CService &addrBind, string& strError)
@@ -1587,18 +1598,16 @@ bool BindListenPort(const CService &addrBind, string& strError)
return false ;
}
# ifndef WIN32
# ifdef SO_NOSIGPIPE
// Different way of disabling SIGPIPE on BSD
setsockopt ( hListenSocket , SOL_SOCKET , SO_NOSIGPIPE , ( void * ) & nOne , sizeof ( int ) ) ;
# endif
# ifndef WIN32
// Allow binding if the port is still in TIME_WAIT state after
// the program was closed and restarted. Not an issue on windows.
// the program was closed and restarted. Not an issue on windows!
setsockopt ( hListenSocket , SOL_SOCKET , SO_REUSEADDR , ( void * ) & nOne , sizeof ( int ) ) ;
# endif
# ifdef WIN32
// Set to non-blocking, incoming connections will also inherit this
if ( ioctlsocket ( hListenSocket , FIONBIO , ( u_long * ) & nOne ) = = SOCKET_ERROR )
@ -1622,10 +1631,8 @@ bool BindListenPort(const CService &addrBind, string& strError)
@@ -1622,10 +1631,8 @@ bool BindListenPort(const CService &addrBind, string& strError)
# endif
# endif
# ifdef WIN32
int nProtLevel = 10 /* PROTECTION_LEVEL_UNRESTRICTED */ ;
int nParameterId = 23 /* IPV6_PROTECTION_LEVEl */ ;
// this call is allowed to fail
setsockopt ( hListenSocket , IPPROTO_IPV6 , nParameterId , ( const char * ) & nProtLevel , sizeof ( int ) ) ;
int nProtLevel = PROTECTION_LEVEL_UNRESTRICTED ;
setsockopt ( hListenSocket , IPPROTO_IPV6 , IPV6_PROTECTION_LEVEL , ( const char * ) & nProtLevel , sizeof ( int ) ) ;
# endif
}