Поскольку я на самом деле занимаюсь рефакторингом старого кода C ++, функция accept () (если можно установить неблокирующим) вполне подойдет. Я пытался избежать асинхронных функций из-за незнакомой мне всей концепции:
tcp::socket *CTCPServer :: AsyncAccept( )
{
tcp::socket *Socket = new tcp::socket( *m_Service );
m_Socket.async_accept( *Socket, endpoint, boost::bind( &CTCPServer::HandleAccept, this ) );
return Socket;
}
Возможно ли что-то подобное (это удалось с accept () )? В основном у меня есть класс CTCPServer, который прослушивает, если соединение установлено, я делаю CTCPSocket (io_service *, socket *), который завершается с ошибкой «Bad file descriptor» (и это не проблема в io_service).
Мой основной тест:
tcp::socket *Socket;
CTCPServer Server( &io_service, 6667 );
while( true )
{
if( ( Socket = Server.AsyncAccept( ) ) )
{
CTCPSocket TCPSocket( &io_service, Socket ); // fails
TCPSocket.PutBytes( "stack overflow" );
TCPSocket.DoSend( );
}
}
Скажите мне, если вам нужно больше, если я могу это назвать, источника.