示例#1
0
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");
	}
}