boost :: asio signal_set - идет в цикле - PullRequest
1 голос
/ 18 февраля 2012

Я пытаюсь написать простой клиент, который отправит сообщение на сервер.Количество отправляемых сообщений будет основано на вводе, полученном от stdin.Ожидается, что программа будет работать непрерывно, пока не будет завершена.Для процедуры завершения я использую усиленный сигнал.При запуске программы процесс будет ждать, пока я наберу количество итераций.Теперь, если я запускаю команду kill -SIGTERM, процесс зацикливается и начинает выводить «Введите количество сообщений для отправки:»Подскажите, пожалуйста, в чем здесь ошибка?

    boost::asio::io_service io_service;
    int main(int argc, char* argv[])
    {
        // Hardcoded the server IP and port
        tcp::socket sock(io_service);
        boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 5001);
        boost::asio::signal_set signals(io_service, SIGTERM);
        signals.async_wait(boost::bind(&boost::asio::io_service::stop, &io_service));
        sock.connect(endpoint);

        while (true)
        {
          char request[max_length] = "Message to be sent";

          int iter = 0;
          cout << "Enter number of messages to pump:";
          cin >> iter;

          for(int i=0 ; i < iter; i++)
          {
            size_t request_length = strlen(request);
            boost::asio::write(sock, boost::asio::buffer(request, request_length));
            cout << "Message written [" << request_length << "]:" << request << "\n";
          }
        }
    }

1 Ответ

2 голосов
/ 21 ноября 2012

Ваш обработчик сигнала никогда не будет вызываться, потому что async_wait не будет работать, если не вызывается io_service.run ().

...