8

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

然后我开始阅读 boost::asio::ip::udp::socket文档,发现它提到的 API 如下:

  • async_connect:启动异步连接
  • async_receive:在连接的套接字上启动异步接收。
  • async_send:在已连接的套接字上启动异步发送。

现在这对新手来说有点混乱。我可以找到 3 个可能导致我困惑的原因(按相似度排序:))

  1. 我错过了一些东西
  2. asio 实现在幕后做一些事情来虚拟化连接。
  3. 文档有误

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

有人请赐教吗?

4

1 回答 1

13

Single UNIX 规范对 c​​onnect 对无连接套接字的作用有更好的解释:

如果启动套接字不是连接模式,则 connect() 设置套接字的对等地址,但不建立连接。对于 SOCK_DGRAM 套接字,对等地址识别所有数据报在后续 send() 调用中的发送位置,并限制远程发送方以进行后续 recv() 调用。

于 2012-05-19T22:41:39.480 回答