void HttpInterfaceFactory::HttpInterfaceFactoryThread::run() { const uint32 maxTimeout = MAX_UINT32; int res = 0; set<Selectable*> readReady; set<Selectable*> writeReady; IPnPort address( 0, 0 ); if ( ! m_socket->getSockName( address.first, address.second ) ) { mc2dbg << "[HttpIF]: Failed to get socket name." << endl; } while ( !terminated ) { res = m_selector->select( maxTimeout, readReady, writeReady ); if ( !readReady.empty() && *readReady.begin() == m_socket ) { // Accept all new sockets in queue TCPSocket* newSocket = NULL; do { newSocket = m_socket->accept(); if ( newSocket != NULL ) { // Set non blocking newSocket->setBlocking( false ); uint32 IP = 0; uint16 port = 0; if ( newSocket->getPeerName( IP, port ) ) { mc2dbg2 << "Connection from " << prettyPrintIP( IP ) << " port " << port << endl; m_factory->putNewRequest( new HttpInterfaceRequest( newSocket, address ) ); } else { // No peer, then broken socket mc2log << warn << " Couldn't get peer, aborting request." <<endl; delete newSocket; } } } while ( newSocket != NULL ); readReady.clear(); m_selector->addSelectable( m_socket, true, false ); } } // End while !terminated mc2log << info << "HttpInterfaceFactoryThread ends" << endl; }