【发布时间】:2013-12-28 03:06:59
【问题描述】:
man page for recvfrom 将其行为总结为“从套接字接收消息”。如果套接字是 SOCK_STREAM 或 SOCK_DGRAM 类型,“消息”是否与“数据包”同义?如果不是,它有什么不同?
【问题讨论】:
-
流套接字没有消息,因此 API 不可能读取消息。 TCP 只是没有消息边界。
-
没有消息边界——我想这就是为什么它们被称为流套接字。但是,手册页到处都使用“消息”这个词。假设 recvfrom 在流套接字上工作,手册页引用的“消息”是什么?
-
你为什么首先问这个?对 TCP 使用
recv。recvfrom用于面向消息的协议。 -
试图了解数据包中发送的内容与recv访问的内容之间是否存在1-1对应关系。在我看来没有,recv 可能会访问多个数据包的内容。
-
是的,
message这个词的用法在该页面上令人困惑。网络数据包和recv()结果通常没有一对一的关系,但它取决于底层传输和配置(缓冲区大小、Nagle、消息大小、吞吐量、协议……)和 can实际上是由底层协议承诺的(参见UDP)。