应用层协议(protocol)设计中对 recvfrom() 的困惑

标签 c protocols

假设使用 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/

相关文章:

swift - 在 Swift 中实现特定协议(protocol)的类数组

ios - 协议(protocol)或 BaseViewController

c++ - NS2-协议(protocol)修改-AODV

cocoa - 避免协议(protocol)方法找不到方法

c - SDL 中的退出事件循环

从C调用R函数 "optim"

c - 在c中的文件末尾添加信息

c - 数据被模拟的酒店叫醒服务覆盖

c++ - 如何将此代码从 C 更改为 C++

ios - 为什么 tableView :cellForRowAtIndexPath: and tableView:heightForRowAtIndexPath: do not belong to the same protocol?