bool IOProcessor::Add(IOOperation* ioop) { if (ioop->active) { ASSERT_FAIL(); // return true; } // empty buffer indicates that we are waiting for accept event if (ioop->type == TCP_READ && ioop->data.buffer == NULL) return StartAsyncAccept(ioop); // zero length indicates that we are waiting for connect event if (ioop->type == TCP_WRITE && ioop->data.length == 0) return StartAsyncConnect(ioop); switch (ioop->type) { case TCP_READ: case UDP_READ: return RequestReadNotification(ioop); break; case TCP_WRITE: case UDP_WRITE: return RequestWriteNotification(ioop); break; } return false; }
void SocketBackEnd::HandleAsyncAccept(const boost::system::error_code& error) // socket_ptr pSocket) { if(bRunning) { boost::thread t(boost::bind(&SocketBackEnd::session, this, _pSocket)); if(bRunning) StartAsyncAccept(); } }
void SocketBackEnd::server(boost::asio::io_service& io_service, short port) { try { _pAcceptor = new tcp::acceptor(io_service, tcp::endpoint(tcp::v4(), port)) ; _pAcceptor->set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); StartAsyncAccept(); // Thread will stop here... } catch(...) { std::cout << StrFormat("Fatal Error in SocketBackEnd::server\n"); } }