Инициированная асинхронная операция c была отменена деструктором signal_set
. Вот почему вы получаете operation_aborted
.
Ваша signal_set
является локальной переменной. Он удаляется в конце области действия HandleSignal
.
Ссылка на signal_set состояния деструктора:
Эта функция уничтожает набор сигналов, отменяя любые невыполненные асинхронные операции ожидания, связанные с набором сигналов, как если бы вызывал метод cancel .
Вы можете создать signal_set
в качестве члена данных, чтобы продлить срок его службы:
struct S {
S():io_context(), signals(io_context, SIGINT, SIGTERM){}
void Start() {
try {
io_context.run();
}
catch (std::exception& ex) {
std::cout << "exception: " << ex.what() << std::endl;
}
}
void HandleSignal() {
signals.async_wait( [](const boost::system::error_code& ec, int )
{
if(ec&&ec==boost::asio::error::operation_aborted)
std::cout <<"Exception";
else
std::cout << "handler fired" << std::endl;
});
}
boost::asio::io_context io_context;
boost::asio::signal_set signals;
};