Eu não usei Boost::asio
, mas, à primeira vista, parece que você deseja usar .run()
e não .poll()
. Como Patrick aponta, a chamada de sistema poll()
normativa pode bloquear passivamente, enquanto asio::poll()
explicitamente não (exigindo loop ocupado), mas run()
:
The run() function blocks until all work has finished and there are no more handlers to be dispatched, or until the io_service has been stopped.
Naturalmente, isso não resolve o problema se você estiver lidando com um fluxo contínuo de pacotes - mas, em seguida, acho que você foi recuado para um canto. Se o sistema deve fazer uso periódico desse núcleo, e você também deve usar apenas esse núcleo, e desistir dele introduz a latência em seu manuseio, que é uma rocha e um lugar difícil.