Index: win_iocp_io_service.ipp =================================================================== --- win_iocp_io_service.ipp (revision 81044) +++ win_iocp_io_service.ipp (working copy) @@ -407,8 +407,9 @@ return 0; } - // If we're not polling we need to keep going until we get a real handler. - if (block) + // If we're not polling we need to keep going until we get a real handler, + // unless we have been stopped. + if (block && ::InterlockedExchangeAdd(&stopped_, 0) == 0) continue; ec = boost::system::error_code();