0

問題は、asio ソケット関数 close() を呼び出してソケットを閉じると、以前に送信されたデータがすべて失われたことです!</p>

4

1 に答える 1

1

が呼び出される前にすべてのデータが書き込まれcloseていることを確認するには、io_service のイベント ループを利用する必要があります。

その方法の例として、asio のチャット クライアントを見てみましょう。

void write(const chat_message& msg)
{
  io_service_.post(boost::bind(&chat_client::do_write, this, msg));
}

void close()
{
  io_service_.post(boost::bind(&chat_client::do_close, this));
}

postイベント ループに実際の書き込みを行うことで、すべてが正しい順序で行われるようにする作業を委任しています。

ソケットを閉じる前にリモート エンドポイントがすべてを受信したことを確認したい場合は、ある種のプロトコルを組み込む必要があります。つまり、リモート エンドポイントに確認メッセージを送信させる必要があります。

于 2012-06-03T01:46:04.707 に答える