0
次のコードは安全ですか?非同期呼び出し後にasioソケットを削除する
boost::asio::io_service io_service;
auto socket(new std::unique_ptr<boost::asio::tcp::socket>(io_service);
.
.
.
boost::asio::async_read(*socket, buffer, handler);
socket.reset();
また、ソケットを削除する前にハンドラが実行されるのを待つ必要がありますか? また、代わりにsocket->async_receive(...)
を使用します。
私はWindowsとLinuxの両方でこれに興味があります。
は 'あなたがソケット上でメッセージを受信するまで、あなたの呼び出し元のスレッドがブロックされます...にも決して起こらない可能性がある)('ソケットのrecvを行います。 – Arunmu
@Arunmu oops、recyncをasync_receiveに変更しました – doron
私はそれを良い考えだとは思いません。そのソケットで読み取りが行われる前にソケットを閉じる理由は何ですか?ハンドラを読んでソケットを閉じたり、タイムアウトを設定したりして、ソケット上の 'cancel'を行い、ソケットを閉じることができます。 – Arunmu