我有一个应用程序可以通过TCP接收相对稀疏的流量,而没有应用程序级别的响应。我认为TCP堆栈正在发送延迟的ACK(基于对网络数据包捕获的浏览)。建议为单个套接字禁用网络堆栈中的延迟ACK的推荐方法是什么?我看过了TCP_QUICKACK,但看来堆栈还是会改变我的脚下。
TCP_QUICKACK
它运行在Linux 2.6内核上,我不担心可移植性。
你可以setsockopt(sockfd, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int))以后每次recv执行。看来TCP_QUICKACK只有在发送或接收数据时才复位;如果您不发送任何数据,则只有在接收到数据后它才会被重置,在这种情况下,您只需重新设置即可。
setsockopt(sockfd, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int))
recv
您可以在第14 个字段中进行检查/proc/net/tcp;如果不是1,则应立即发送ACK …如果我正确读取了TCP代码。(我也不是专家。)
/proc/net/tcp