考虑通过套接字发送的 100 个字节。对于 TCP 套接字,如果我recv()
以 50 的长度调用,我会得到前 50 个字节,如果我再次调用它,我会得到第二个 50 个字节。使用 UDP 套接字,如果我recvfrom()
以 50 的长度调用,我会得到前 50 个字节,但无法检索第二个 50 个字节——后续调用recvfrom()
阻塞,直到收到下一个数据报。
这是否意味着,如果我想接收整个 UDP 数据报,无论大小,我都必须分配一个 64k 的缓冲区(UDP 允许的最大值)?如果我connect()
的 UDP 套接字,这会改变行为吗?或者在 UDP 上运行的协议通常需要一个已知的最大数据包大小,应该用于缓冲区?