考虑通过套接字发送100字节的情况。使用TCP套接字,如果我调用长度为50的
recv()
,我会得到前50个字节,如果再次调用它,我会得到后50个字节。使用UDP套接字,如果我调用长度为50的recvfrom()
,我会得到前50个字节,但是我无法检索第二个50个字节,因为后续对recvfrom()
的调用会阻塞,直到下一个数据报被接收。
这是否意味着,如果我想要接收完整的UDP数据报(无论大小),我必须分配一个64k缓冲区(UDP允许的最大值)?如果我使用connect()
我的UDP套接字,这会改变行为吗?或者说,基于UDP运作的协议通常包含应该用于缓冲区的已知最大数据包大小吗?
MSG_TRUNC
定义为输入标志(https://www.freebsd.org/cgi/man.cgi?query=recv&sektion=2)。 - redfast00