ppoll 是否聚合数据包?

Does ppoll aggregate packets?

ppoll() 是否聚合数据包?我有一个我构建的套接字库,它在低吞吐量下工作得很好。但是,当我开始增加消息数量时,我开始看到数据包大小增加。我检查了发件人大小,发件人发送的所有数据包都是正确的。当调用 recv() 函数时,数据包开始达到最大值并导致应用程序出现故障。有什么线索吗?

ppoll() 不会聚合数据包,但套接字接收缓冲区会聚合,发送方的套接字发送缓冲区也会聚合。您不能依赖 TCP 中的接收计数:没有消息,并且发送方写入之间的边界不会在接收方保留。它是严格的字节流。任何打包完全由您来实现。

When the recv() fucntion is called the packets begin to max out and causes the app to fault.

仅当您的代码中存在错误时。典型错误包括:

  • 假设 recv() 填充或未填充缓冲区
  • 在缓冲区的末尾粘贴一个空值以以空值终止它以进行字符串处理,如果缓冲区已满,这将不起作用
  • 假设没有错误,或者流没有结束
  • 完全忽略 recv() 返回的计数。