@ -963,6 +963,15 @@ static void AcceptConnection(const ListenSocket& hListenSocket) {
return ;
return ;
}
}
// According to the internet TCP_NODELAY is not carried into accepted sockets
// on all platforms. Set it again here just to be sure.
int set = 1 ;
# 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 ( CNode : : IsBanned ( addr ) & & ! whitelisted )
if ( CNode : : IsBanned ( addr ) & & ! whitelisted )
{
{
LogPrintf ( " connection from %s dropped (banned) \n " , addr . ToString ( ) ) ;
LogPrintf ( " connection from %s dropped (banned) \n " , addr . ToString ( ) ) ;
@ -1790,8 +1799,11 @@ bool BindListenPort(const CService &addrBind, string& strError, bool fWhiteliste
// 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
// Set to non-blocking, incoming connections will also inherit this