Impulso :: Asio. ¿En qué hilo se envía el mensaje?

Estoy tratando de entender el trabajo interno de boost::asio library, que es realmente genial. He escrito un cliente simple que envía un mensaje a un servidor.

La pregunta es: ¿en qué hilo realmente envía el mensaje?

Como uso el método async_write() , vuelve inmediatamente después de llamar y no envía nada. He comentado el método io_service.run() , y después de eso no se llamó al manejador (está bien), ¡pero el mensaje fue enviado! (Lo he comprobado en los registros del servidor)

Por cierto, no uso -lpthread , solo -lboost_system mientras -lboost_system , así que asumo que todo el progtwig funciona en un solo hilo y no hay hilos “ocultos”.

No puedo hacer la cabeza o la cola de donde fue enviado el mensaje.

 #include  #include  const std::string str("HELLO!"); int main() { boost::asio::io_service io_service; boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 33333); boost::asio::ip::tcp::socket socket(io_service); boost::system::error_code ec; boost::asio::connect(socket, &endpoint, ec); boost::asio::async_write(socket, boost::asio::buffer(str), [](const boost::system::error_code& ec, std::size_t length) { if (!ec) { std::cout << "Sent!" << std::endl; } else { std::cout << "Err: " << ec.message() << std::endl; } }); //io_service.run(); return 0; } 

El mensaje se habría enviado (o al menos en cola en la stack de la red, tal vez para ser manejado por un subproceso del núcleo, o algún otro mecanismo dependiente de la implementación del que no debería preocuparse) durante la llamada a async_write . No hay necesidad de diferir eso, si se puede hacer sin bloquear el subproceso de llamada, lo que normalmente puede ser.

No se llamará al controlador de finalización hasta que se ejecute el io_service y se le notifique que se ha enviado el mensaje.