boost :: asio :: io_service в потоке, не завершается при выходе из приложения - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть приложение, которое использует 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, чтобы выйти из цикла, я предполагаю, что это происходит из-за того, что он застрял в ожидании клиента, который никогда не подключается.

Как я могу правильно завершить этот поток, пока получатель ожидает?

1 Ответ

0 голосов
/ 19 сентября 2018

Как вы «пытаетесь закрыть приложение перед подключением клиента»?

Если вы используете обычные методы, вы, вероятно, можете обработать сигнал:

Кроме этого, в принципе нет способа отменить синхронное принятие, но вы можете подделать его, подключившись к своему собственному концу прослушивания, таким образом возвращая accept.

...