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;
}