networking - 连接 "connection less"boost::asio::ip::udp::socket

标签 networking udp boost-asio

我最近通过浏览网络了解了 UDP 套接字,所有解释它的页面都提到 UDP 套接字是“少连接”。如果我理解正确的话,这意味着两个套接字之间没有“连接”,而是在不知道另一端是否正在监听的情况下将数据报包发送到指定的端点。

然后我开始阅读 boost::asio::ip::udp::socket docs并发现它提到了如下 API:

  • async_connect:启动异步 连接 .
  • async_receive:在 上启动异步接收已连接的 socket .
  • async_send:在 上启动异步发送已连接的 socket .

  • 现在这对新手来说有点困惑。我可以找到 3 个可能导致我困惑的原因(按可能性排序 :))
  • 我遗漏了一些东西
  • asio 实现在幕后做一些事情来虚拟化连接。
  • 文档有误

  • 当您打开 basic_datagram_socket::async_connect 的页面时,文档中还有一个小故障。那里的例子是实例化 TCP 套接字(而不是 UDP 的)。

    有人会启发我吗?

    最佳答案

    Single UNIX 规范对 connect 有更好的解释适用于无连接套接字:

    If the initiating socket is not connection-mode, then connect() sets the socket's peer address, but no connection is made. For SOCK_DGRAM sockets, the peer address identifies where all datagrams are sent on subsequent send() calls, and limits the remote sender for subsequent recv() calls.

    关于networking - 连接 "connection less"boost::asio::ip::udp::socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10644115/

    相关文章:

    c++ - Google Protocol Buffers - 缺少必填字段,即使所有字段显然都存在

    boost-asio - 如何使用 boost ASIO 列出可用端口?

    c - 类似于旧 glibc 版本的 getifaddrs

    node.js - socket.io如何获取服务器套接字监听地址和端口

    python - 扭曲忽略从 MUD 客户端发送的数据?

    networking - 视频流上的 TCP 与 UDP

    networking - NIC 和用户应用程序之间的 *nix 系统中的内存副本计数?

    Linux:在端口 0 上绑定(bind)时会发生什么

    Java:为什么 DatagramSocket 的 `receive` 方法会截断消息?

    c++ - Asio 和 HTTP 保活