我有一个用例,我在一个方向上通过 TCP/IP 发送数据。我通过多个 send()
调用来执行此操作,这些调用具有非常小的(相对于以太网帧的大小)有效负载(没有任何 send()
标志-称呼)。为了防止我的小负载数据包膨胀到一个完整的以太网帧的大小,我认为使用 TCP_CORK
套接字选项会很好。这行得通,但是当实际比较使用TCP_CORK
前后的情况时,我注意到这种聚合已经完成了。为什么会这样?正如我所说,我没有为 send()
(如 MSG_MORE
)或其他套接字选项使用任何标志,所以我原以为我的原始解决方案是浪费的。
最佳答案
如果您发送消息的速度非常快,您可能会发现 Nagle 算法在起作用。您必须明确禁用它。在 linux 中的 IIrc 你必须设置 TCP_NODELAY,但在其他操作系统中有不同的选项。
关于sockets - TCP_CORK 的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7600507/