如果在套接字上的每个调用上设置 TCP_QUICKACK 设置,之前设置了 TCP_NODELAY,QUICKACK 选项会覆盖 NODELAY 调用吗?
连接时:
int i = 1;
setsockopt( iSock, IPPROTO_TCP, TCP_NODELAY, (void *)&i, sizeof(i));
在每次写入时:
int i = 1;
setsockopt( iSock, IPPROTO_TCP, TCP_QUICKACK, (void *)&i, sizeof(i));
对 TCP_QUICKACK 的调用是否会使先前对 TCP_NODELAY 的调用无效?
原文由 donalmg 发布,翻译遵循 CC BY-SA 4.0 许可协议
这两个选项之间没有直接关系,它们只是用于不同的目的。
TCP_NODELAY 旨在禁用/启用段缓冲,以便可以尽快将数据发送到对等方,因此这通常用于提高网络利用率。 TCP_QUICKACK 用于尽早发送确认,而不是在某些协议级别交换下延迟,并且它不是稳定/永久的,后续 TCP 事务(可能在后台发生)可以忽略此选项,具体取决于实际协议级别处理或任何实际用户设置和堆栈行为之间的分歧。
注意
TCP_NODELAY
是可移植的,而TCP_QUICKACK
不是(仅适用于 Linux 2.4.4+)。