int ReliSock::accept( ReliSock &c ) { int c_sock; if (_state != sock_special || _special_state != relisock_listen || c._state != sock_virgin) { return FALSE; } if (_timeout > 0) { Selector selector; selector.set_timeout( _timeout ); selector.add_fd( _sock, Selector::IO_READ ); selector.execute(); if( selector.timed_out() ) { return FALSE; } else if ( !selector.has_ready() ) { dprintf( D_ALWAYS, "select returns %d, connect failed\n", selector.select_retval() ); return FALSE; } } #ifndef WIN32 /* Unix */ errno = 0; #endif if ((c_sock = condor_accept(_sock, c._who)) < 0) { #ifndef WIN32 /* Unix */ if ( errno == EMFILE ) { _condor_fd_panic ( __LINE__, __FILE__ ); /* This calls dprintf_exit! */ } #endif return FALSE; } c.assign(c_sock); c.enter_connected_state("ACCEPT"); c.decode(); int on = 1; c.setsockopt(SOL_SOCKET, SO_KEEPALIVE, (char*)&on, sizeof(on)); /* Set no delay to disable Nagle, since we buffer all our relisock output and it degrades performance of our various chatty protocols. -Todd T, 9/05 */ c.setsockopt(IPPROTO_TCP, TCP_NODELAY, (char*)&on, sizeof(on)); return TRUE; }