TCP_NODELAY是否会通过accept继承?

5
如果我使用启用了TCP_NODELAY选项的TCP套接字来监听新连接,那么由accept返回的新套接字是否也启用了TCP_NODELAY选项?
不同的套接字可以有不同的配置选项,尽管由accept返回的套接字继承其选项的想法是有道理的。这是否取决于具体的实现?

这里需要回答的第一个问题是,在监听套接字上设置TCP_NODELAY是否有效。当您尝试时发生了什么? - user207421
需要回答的第二个问题是,您从何得出“像TCP_NODELAY这样的选项是基于每个套接字启用的”的想法,这完全排除了从监听套接字继承的想法,这显然是不正确的。 - user207421
@EJP在listen之后立即执行setsockopt时不会返回任何错误,并且随后的getsockopt指示参数已设置。如果此行为依赖于实现,则在所有系统上可能都不是这种情况,这就是为什么我在问(否则我会自己测试的)。 - Wingblade
@EJP:“这个标志(TCP_NODELAY)是一个选项,可以在每个套接字上启用,并且在创建TCP套接字时应用。” 这是来自此答案的引用。函数setsockopt应用于特定套接字(作为参数传递的那个),不同的套接字可以有不同的配置。(如果它是全局的,那肯定会引起问题,这很奇怪。) - Wingblade
1
“Enabled on a per-socket basis”并不排除继承,而您引用的答案是关于每个套接字与系统范围而非每个套接字与继承之间的区别。无论如何,其他人在SO上说什么都是无关紧要的。唯一重要的是主要来源,即规范文档。我的经验是,每个套接字选项都会从监听套接字继承到接受套接字,除非有意干扰,例如使用Java套接字中的SO_RCVTIMEO选项。我的问题“当您尝试时发生了什么”仍然存在。 - user207421
显示剩余3条评论
1个回答

2

是的,在监听套接字上设置的 TCP_NODELAY 选项会被接受的套接字继承。在 Linux 4.18.0 上进行了测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接