我有一个用例,我通过TCP / IP向一个方向发送数据。我通过多个send()
进行此操作 - 调用非常小(与以太网帧的大小相关)有效负载(没有send()
调用的任何标志)。为了防止我的小有效负载数据包膨胀到一个完整的以太网帧的大小,我认为使用TCP_CORK
套接字选项会很好。这有效,但在实际比较使用TCP_CORK
之前和之后的情况时,我注意到这种聚合已经完成了。为什么会这样?正如我所说,我没有使用任何标志send()
(如MSG_MORE
)或其他套接字选项,所以我原本期望我的原始解决方案是浪费。
答案 0 :(得分:2)
如果您非常快速地发送消息,您可能会看到Nagle算法在工作。您必须明确禁用它。在linux中Iirc你必须设置TCP_NODELAY,但在其他操作系统中有不同的选项。