socket::close()
が呼び出されると、ブーストのドキュメントによれば、非同期の送信、受信、または接続操作は直ちにキャンセルされ、 boost::asio::error::operation_aborted
エラーで完了します。boost :: asio :: ip :: tcp :: socket :: cancelとsocket :: closeの違い
socket::cancel
すべての未処理の非同期接続、送信、受信操作が直ちに終了し、キャンセルされた操作のハンドラにはboost::asio::error::operation_aborted
エラーが送信されます。
どういう違いがありますか?
1つのソケット接続を終了したいとき、コールバックハンドラがboost::asio::error::operation_aborted
で呼び出されるようにコールする必要がありますか?
私は近くで使用してキャンセルしない場合、いくつかの問題がありますか? close関数はソケットを閉じることができ、未処理の非同期操作は、boost :: asio :: error :: operation_abortedエラーを返すことで停止します。なぜなら、非同期操作が実行されている場合、close.iではなくcancelを使用する必要があるからです。キャンセルしますか? asio :: ip :: tcp :: resolve :: cancelのように、私はasync_resolveを呼び出した後にresolve_handlerをキャンセルするのに多くの時間を費やしますが、resolve_handlerは常にboost :: asio :: error :: operation_abortedエラーを返さないでください。実行?はい? –
@xiaoソケットを閉じる場合は、closeを使用しても問題はありません。 async_resolveに関する追加の質問をすることをお勧めします。私の答えがあなたを助けてくれたら、それを受け入れてください。 –