2012-02-18 19 views
1

私はサーバーにメッセージを送信するシンプルなクライアントを作成しようとしています。送信するメッセージの数はstdinから与えられた入力に基づいています。プログラムは終了するまで継続的に実行される予定です。終了ルーチンについては、私はブースト信号セットを使用しています。プログラムを実行すると、プロセスは反復回数をキー入力するのを待ちます。今私がkill -SIGTERMを発行すると、プロセスはループし、 "ポンプに送るメッセージの数を入力してください:"という印刷を開始します。ここで間違いは何ですか?boost :: asio signal_set - ループに入ります

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"; 
      } 
     } 
    } 

答えて

2

io_service.run()が呼び出されない限り、async_waitは機能しないため、シグナルハンドラは呼び出されません。

関連する問題