THREAD_PROC ThreadedSocketAcceptor::socketConnectionThread( void* p ) { ConnectionThreadInfo * info = reinterpret_cast < ConnectionThreadInfo* > ( p ); ThreadedSocketAcceptor* pAcceptor = info->m_pAcceptor; ThreadedSocketConnection* pConnection = info->m_pConnection; delete info; int socket = pConnection->getSocket(); while ( pConnection->read() ) {} delete pConnection; if( !pAcceptor->isStopped() ) pAcceptor->removeThread( socket ); return 0; }
THREAD_PROC ThreadedSocketInitiator::socketThread( void* p ) { ThreadPair * pair = reinterpret_cast < ThreadPair* > ( p ); ThreadedSocketInitiator* pInitiator = pair->first; ThreadedSocketConnection* pConnection = pair->second; FIX::SessionID sessionID = pConnection->getSession()->getSessionID(); FIX::Session* pSession = FIX::Session::lookupSession( sessionID ); int socket = pConnection->getSocket(); delete pair; pInitiator->lock(); if( !pConnection->connect() ) { pInitiator->getLog()->onEvent( "Connection failed" ); pConnection->disconnect(); delete pConnection; pInitiator->removeThread( socket ); pInitiator->setDisconnected( sessionID ); return 0; } pInitiator->setConnected( sessionID ); pInitiator->getLog()->onEvent( "Connection succeeded" ); pSession->next(); while ( pConnection->read() ) {} delete pConnection; if( !pInitiator->isStopped() ) pInitiator->removeThread( socket ); pInitiator->setDisconnected( sessionID ); return 0; }