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()
返回的计数。
ppoll()
是否聚合数据包?我有一个我构建的套接字库,它在低吞吐量下工作得很好。但是,当我开始增加消息数量时,我开始看到数据包大小增加。我检查了发件人大小,发件人发送的所有数据包都是正确的。当调用 recv()
函数时,数据包开始达到最大值并导致应用程序出现故障。有什么线索吗?
ppoll()
不会聚合数据包,但套接字接收缓冲区会聚合,发送方的套接字发送缓冲区也会聚合。您不能依赖 TCP 中的接收计数:没有消息,并且发送方写入之间的边界不会在接收方保留。它是严格的字节流。任何打包完全由您来实现。
When the recv() fucntion is called the packets begin to max out and causes the app to fault.
仅当您的代码中存在错误时。典型错误包括:
- 假设
recv()
填充或未填充缓冲区 - 在缓冲区的末尾粘贴一个空值以以空值终止它以进行字符串处理,如果缓冲区已满,这将不起作用
- 假设没有错误,或者流没有结束
- 完全忽略
recv()
返回的计数。