4

boost::asio で udp ソケットにファイア アンド フォーゲット アプローチしても安全ですか?

たとえば、そのようなコードがある場合

 socket.async_send(buffer(somedata1),write_handler);
 socket.async_send(buffer(somedata2),write_handler);
 socket.async_send(buffer(somedata3),write_handler);
 socket.async_send(buffer(somedata4),write_handler);

これが失敗しないことは保証されていますか?つまり、受信側のエンドポイントで、 somedata1,somedata2,somedata3,somedata4 を含む 4 つのパケットが取得されるということですか?

4

2 に答える 2

2

基礎となるプロトコルが保証しないという理由だけで、保証はありません。

ハンドラーが呼び出されるまでbuffer during に提供された基になるメモリsocket.async_send()が有効なままであり、他のスレッドが を同時に呼び出していない限りsocket、 の基準socket.async_send()が満たされ、安全であるはずです。


実装の詳細については、basic_datagram_socket::async_send()はそのサービスに単一の非構成操作 (reactive_socket_send_opまたはwin_iocp_socket_send_op) を作成させます。その後、サービスはreactor操作を開始します。一部のリアクターの実装では、操作をすぐに実行しようとする場合があります。それ以外の場合は、操作の種類 (読み取りまたは書き込み) に基づいて、ソケット ファイル記述子に固有のキューに操作が追加されます。操作キューを使用すると、特定のファイル記述子に対して複数の読み取りまたは書き込み操作を未処理にすることができます。

于 2013-10-28T17:59:45.323 に答える