禁用TCP延迟确认

我有一个应用程序,通过TCP接收相对稀疏的stream量,没有应用程序级响应。 我相信TCP堆栈正在发送延迟的ACK(基于对networking数据包捕获的扫描)。 什么是推荐的方法来禁用单个套接字的networking堆栈中的延迟ACK? 我已经看了TCP_QUICKACK ,但似乎堆栈会改变它在我的脚下。

这是在Linux 2.6内核上运行的,我并不担心可移植性。

Solutions Collecting From Web of "禁用TCP延迟确认"

您可以在每次执行recv后使用setsockopt(sockfd, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int)) 。 看起来TCP_QUICKACK只有在有数据被发送或接收的时候才被重置, 如果您没有发送任何数据,那么只有当您收到数据时才会重置,在这种情况下,您可以简单地重新设置。

你可以在/proc/net/tcp 14 字段中检查这个。 如果不是1,则应立即发送ACK …如果我正确读取TCP代码。 (我也不是这方面的专家)

我相信使用setsockopt()函数,您可以使用TCP_NODELAY将禁用Nagle算法。

编辑找到一个链接: http : //www.ibm.com/developerworks/linux/library/l-hisock.html

编辑2汤姆是正确的。 Nagle不影响延迟的ACK。