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