ppoll会聚合数据包吗?

时间:2015-03-12 23:54:23

标签: sockets polling epoll packets

ppoll()汇总数据包了吗?我有一个我构建的套接字库,它的吞吐量很低。但是,当我开始增加消息数量时,我开始看到数据包大小增加。我检查了发件人大小,发件人发送的所有数据包都是正确的。当调用recv()函数时,数据包开始最大化并导致应用程序出错。有线索吗?

1 个答案:

答案 0 :(得分:1)

ppoll()不会聚合数据包,但是套接字接收缓冲区会这样做,发送方的套接字发送缓冲区也是如此。您不能依赖TCP中的接收计数:没有消息,并且接收方不保留发送方写入之间的边界。它严格来说是一个字节流。任何打包都完全取决于您实施。

  

当调用recv()函数时,数据包开始最大化并导致应用程序出错。

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

  • 假设recv()填充或未填充缓冲区
  • 在缓冲区的末尾添加一个null,以便将其终止以进行字符串处理,如果填充缓冲区将无效,
  • 假设没有错误,或者没有结束
  • 完全忽略recv()返回的计数。