int func(boost::asio::ip::tcp::socket &socket)
{
boost::system::error_code ec;
socket.write_some(boost::asio::buffer("hello world!"), ec);
cout << socket.is_open() << endl;
if(ec)
{
cout << boost::system::system_error(ec).what() << endl;
}
return 0;
}
int main(int argc, char* argv[])
{
using namespace boost::asio;
io_service iosev;
ip::tcp::acceptor acceptor(iosev, ip::tcp::endpoint(ip::tcp::v4(), 1000));
while(1)
{
ip::tcp::socket socket(iosev);
acceptor.accept(socket);
boost::thread t = boost::thread(func, boost::ref(socket));
}
return 0;
}
Quiero que un nuevo hilo maneje una nueva conexión. Pero en la función "func", el socket no está abierto y obtuve el "Descriptor de archivo incorrecto". Leí algunos ejemplos en el documento y en la web, pero son asíncronas. Creo que no es necesario para mi simple demanda.Tengo "Descriptor de archivo incorrecto" cuando uso boost :: asio y boost :: thread
¿Cómo puedo reparar el error? Cualquier ayuda es apreciada
Posiblemente esto sucede porque el hilo principal ejecuta accept (socket) al mismo tiempo, ya que otro hilo intenta trabajar con el socket. Al pasar por referencia, está trabajando con la misma instancia de socket. –
@AlexFarber No creo eso. Como uso solo un cliente para conectar el servidor, solo hay una conexión. – leezii
Pero al mismo tiempo, cuando un cliente intenta trabajar con el socket, el hilo principal aplica accept operator al mismo socket. –