8

最近、ネットを閲覧してUDPソケットについて学んでおり、それを説明しているすべてのページで、UDPソケットは「コネクションレス」であると言及されていました。これは、2 つのソケット間に「接続」がなく、相手側がリッスンしているかどうかを知らずに、指定されたエンドポイントにデータグラム パケットを送信することを正しく理解している場合です。

次に、boost::asio::ip::udp::socketのドキュメントを読み始めたところ、次のような API について言及されていることがわかりました。

  • async_connect: 非同期接続を開始します。
  • async_receive:接続された socketで非同期受信を開始します。
  • async_send:接続された socketで非同期送信を開始します。

今、これは初心者にとって少し混乱しています。混乱の3つの考えられる原因を見つけることができます(類似度の順で:))

  1. 何かが足りない
  2. asio 実装は、接続を仮想化するために舞台裏で何かを行っています。
  3. ドキュメントが間違っている

basic_datagram_socket::async_connectのページを開くと、ドキュメントにもわずかな問題があります。例では、( UDPソケットではなく) TCPソケットをインスタンス化しています。

誰かが私を啓発してくれませんか?

4

1 に答える 1

13

シングル UNIX 仕様には、接続のないソケットに対してconnectが行うことについて、より適切な説明があります。

開始ソケットが接続モードでない場合、connect() はソケットのピア アドレスを設定しますが、接続は行われません。SOCK_DGRAM ソケットの場合、ピア アドレスは、後続の send() 呼び出しですべてのデータグラムが送信される場所を識別し、後続の recv() 呼び出しのリモート送信者を制限します。

于 2012-05-19T22:41:39.480 に答える