У меня есть приложение, которое использует boost::asio::io_service
для прослушивания клиентских подключений.Я запускаю это в потоке, с циклом ниже:
static auto const flags = boost::archive::no_header | boost::archive::no_tracking;
while (!_exit)
{
boost::asio::io_service ios;
boost::asio::ip::tcp::endpoint endpoint
= boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 4444);
acceptor = new boost::asio::ip::tcp::acceptor(ios, endpoint);
boost::asio::ip::tcp::iostream stream;
// program stops here until client connects.
acceptor->accept(*stream->rdbuf());
//grab the incoming data using
boost::archive::binary_oarchive archive(*stream);
archive << data;
}
Если клиент подключается, данные поступают и все хорошо.Если я пытаюсь закрыть приложение до подключения клиента, поток не умирает.Я не могу использовать _exit = true
, чтобы выйти из цикла, я предполагаю, что это происходит из-за того, что он застрял в ожидании клиента, который никогда не подключается.
Как я могу правильно завершить этот поток, пока получатель ожидает?