我希望我可以在单个套接字的生命周期内来回快速多次地更改 setsockopt
的 optvals。
具体来说,我需要根据某些业务逻辑启用和禁用 TCP_NODELAY
。有些数据包需要使用 TCP_NODELAY
发送出去,而有些数据包是散装的,应该不用它就可以发送出去。我们事先知道,所以我想设置适当的选项。说来话长 -- 这个问题不是启用或禁用 Nagle 的优点或缺点!
在 setsockopt
调用生效之前是否有延迟?
最佳答案
引用源,它应该立即工作,立即在 tcp_sk 上设置选项:
do_tcp_setsockopt
...
case TCP_NODELAY:
if (val) {
/* TCP_NODELAY is weaker than TCP_CORK, so that
* this option on corked socket is remembered, but
* it is not activated until cork is cleared.
*
* However, when TCP_NODELAY is set we make
* an explicit push, which overrides even TCP_CORK
* for currently queued segments.
*/
tp->nonagle |= TCP_NAGLE_OFF|TCP_NAGLE_PUSH;
tcp_push_pending_frames(sk);
} else {
tp->nonagle &= ~TCP_NAGLE_OFF;
}
break;
关于linux - 动态更改套接字选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34099772/