[Quickfix-users] quickfix crashes in SocketAcceptor
Brought to you by:
orenmnero
From: Jeffrey C. <jef...@pi...> - 2008-03-17 16:03:41
|
All, We identified an issue with SocketAcceptor.cpp that could cause quickfix engine to crash. When socket_peername in Utility.cpp returns 0, fix engine crashes in SocketAcceptor::onConnect() function. SocketAcceptor.cpp void SocketAcceptor::onConnect( SocketServer& server, int a, int s ) { QF_STACK_PUSH(SocketAcceptor::onConnect) if ( !socket_isValid( s ) ) return; SocketConnections::iterator i = m_connections.find( s ); if ( i != m_connections.end() ) return; int port = server.socketToPort( a ); Sessions sessions = m_portToSessions[port]; m_connections[ s ] = new SocketConnection( s, sessions, &server.getMonitor() ); std::stringstream stream; //The crashes happen here //when socket_peername(s) returns 0 stream << "Accepted connection from " << socket_peername( s ) << " on port " << port; if( getLog() ) getLog()->onEvent( stream.str() ); QF_STACK_POP } Utility.cpp const char* socket_peername( int socket ) { QF_STACK_PUSH(socket_peername) struct sockaddr_in addr; socklen_t len = sizeof(addr); if( getpeername( socket, (struct sockaddr*)&addr, &len ) < 0 ) return 0; //when socket_peername returns 0 from here return inet_ntoa( addr.sin_addr ); QF_STACK_POP } We also noticed that this is only an issue when we link with STLPort5.10 (libstlport.so.5.1). When we link with libstdc++.so.6.0.8, crashes do not happen. Regards -Jeff Disclaimer: Any references to Pipeline performance contained herein are based on internal testing and / or historic performance levels which Pipeline expects to maintain or exceed but nevertheless does not guarantee. Congested networks, price volatility, or other extraordinary events may impede future trading activities and degrade performance statistics. Pipeline is a member of FINRA and SIPC. |