0

切断直後にクライアントを再接続しようとすると、サーバー側 (fork() を使用したマルチ プロセス サーバー) で発生するこの例外があります。ブーストを使用していますが、マルチプロセスでのデバッグは私だけのものではないため、例外をスローする正確な命令を今のところ理解していません。

ただし、この時点で次のようになります。

io_service_.notify_fork(boost::asio::io_service::fork_child);

何か案は?

アップデート

私は1.52バージョンのasioを使用しているため、フォークをサポートしており、例外は子プロセスにあります。3 回目の再接続試行で発生するため、

  1. クライアントを接続する
  2. 切断 (ctrl +c で強制)
  3. 再接続 (すべて動作)
  4. 切断する
  5. このクライアント (または別のクライアント) に再接続すると、例外がスローされます。

これはコードです:

   if (fork() == 0)  //I'm child process
   {
      io_service_.notify_fork(boost::asio::io_service::fork_prepare);

     cout << "I'm child process and my PID is " << getpid() << endl;

/*Notifies to the io_service_  the fork termination*/

try
{
  io_service_.notify_fork(boost::asio::io_service::fork_child);
}
catch (boost::exception& e)
       {                                                           cout<<"Exception in notify_fork child "<< endl;
std::cerr << diagnostic_information(e) << std::endl;
}

   /*Closes the listen socket which remains opened in the parent process to      accept new connections*/

acceptor_.close();
}
  else //I'm the parent process
  {
  cout << "I'm the parent process and my PID is " << getpid() << endl;

  /*Notifies to the io_service_  the fork termination*/

  try
  {
  io_service_.notify_fork(boost::asio::io_service::fork_parent);
  }
  catch (boost::exception& e)
  {
  cout<<"Exception in notify_fork parent "<< endl;
  std::cerr << diagnostic_information(e) << std::endl;
  }
      socket_.close();

      /*Listening to new connections*/

  start_accept();
 }
4

0 に答える 0