Preserve the value of errno across the signal handler.
diff --git a/asio/include/asio/detail/impl/signal_set_service.ipp b/asio/include/asio/detail/impl/signal_set_service.ipp index b378030..f0f0e78 100644 --- a/asio/include/asio/detail/impl/signal_set_service.ipp +++ b/asio/include/asio/detail/impl/signal_set_service.ipp
@@ -61,9 +61,11 @@ #if defined(BOOST_WINDOWS) || defined(__CYGWIN__) signal_set_service::deliver_signal(signal_number); #else // defined(BOOST_WINDOWS) || defined(__CYGWIN__) + int saved_errno = errno; signal_state* state = get_signal_state(); (void)::write(state->write_descriptor_, &signal_number, sizeof(signal_number)); + errno = saved_errno; #endif // defined(BOOST_WINDOWS) || defined(__CYGWIN__) #if !defined(ASIO_HAS_SIGACTION)