Asio supports signal handling using a class called signal_set.
Programs may add one or more signals to the set, and then perform an async_wait()
operation. The specified handler will be called when one of the signals occurs.
The same signal number may be registered with multiple signal_set
objects, however the signal number must be used only with Asio.
void handler( const asio::error_code& error, int signal_number) { if (!error) { // A signal occurred. } } ... // Construct a signal set registered for process termination. asio::signal_set signals(io_context, SIGINT, SIGTERM); // Start an asynchronous wait for one of the signals to occur. signals.async_wait(handler);
Signal handling also works on Windows, as the Microsoft Visual C++ runtime library maps console events like Ctrl+C to the equivalent signal.