【发布时间】:2011-11-09 08:07:07
【问题描述】:
如果您在套接字上的每个调用上设置 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 的调用无效?
【问题讨论】:
-
当您执行此操作并使用 Wireshark 之类的工具监控行为时发生了什么?
-
使用getsockopt,我已经验证TCP_QUICKACK不会覆盖TCP_NODELAY。
-
为什么每次写都这样?每个接收到的数据包都会发送一个 ACK,所以 TCP_QUICKACK 应该在每次接收后设置,否则我错过了什么
-
为什么需要 quickack 和 nodelay?设置 nodelay 通常应该可以解决问题。
-
@lxgr TCP_QUICKACK 影响接收器; TCP_NODELAY 影响发件人。如果您无法控制这两个端点,则可能需要同时设置这两个设置才能获得所需的网络性能。