假设使用 Linux 和 UDP。
manpage recvfrom 说:
接收调用通常返回任何可用数据,直到请求的数量,而不是等待收到请求的全部数据。
如果是这种情况,则很有可能从套接字返回部分应用程序级协议(protocol)数据,即使设置了所需的 MAX_SIZE
。
是否应该对 recvfrom
进行后续调用?
从另一种意义上说,也可能有比我想要的更多的数据,例如套接字缓冲区中的两个 UDP 数据包。如果在这种情况下调用 recvfrom()
,它会同时返回它们吗(假设在 MAX_SIZE
内)?
我想在每个 UDP 消息的开头应该有一些应用程序协议(protocol)级别的大小信息,这样它就不会搞砸了。
最佳答案
我想你想要的手册页是this one .它声明将丢弃额外的数据。如果有两个数据包,recvfrom 调用只会从第一个数据包中检索数据。
关于应用层协议(protocol)设计中对 recvfrom() 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2151933/