Sockets TCP_节点是否通过accept继承?

Sockets TCP_节点是否通过accept继承?,sockets,tcp,nagle,Sockets,Tcp,Nagle,如果我创建一个启用了TCP\u节点延迟选项的TCP套接字,并使用它来listen进行新连接,那么accept返回的新套接字是否也启用了TCP\u节点延迟 不同的套接字可以具有不同的配置选项,不过,accept返回的套接字从生成它们的侦听套接字继承它们的选项是有意义的。此实现是否依赖于?是的,侦听套接字上的TCP\u节点延迟由接受的套接字继承。在Linux 4.18.0上测试。这里要回答的第一个问题是设置TCP_节点延迟在侦听套接字上是否有效。当您尝试它时发生了什么?第二个需要回答的问题是,您是从

如果我创建一个启用了
TCP\u节点延迟
选项的TCP套接字,并使用它来
listen
进行新连接,那么
accept
返回的新套接字是否也启用了
TCP\u节点延迟


不同的套接字可以具有不同的配置选项,不过,
accept
返回的套接字从生成它们的侦听套接字继承它们的选项是有意义的。此实现是否依赖于?

是的,侦听套接字上的TCP\u节点延迟由接受的套接字继承。在Linux 4.18.0上测试。

这里要回答的第一个问题是设置TCP_节点延迟在侦听套接字上是否有效。当您尝试它时发生了什么?第二个需要回答的问题是,您是从哪里想到“像TCP_NODELAY这样的选项是在每个套接字的基础上启用的”,这完全排除了从侦听套接字继承的想法,这肯定是不正确的。@EJP在
listen
之后立即执行
setsockopt
,不会返回任何错误,后续的
getsockopt
表明参数已设置。如果此行为依赖于实现,则可能并非所有系统都是如此,这就是我提出此问题的原因(否则我会自己测试)。@EJP“此标志(TCP_NODELAY)是一个选项,可以在每个套接字上启用,并在创建TCP套接字时应用。”是引用自。函数
setsockopt
应用于特定的套接字(它作为参数的套接字),不同的套接字可以有不同的配置。(如果它是全局的,那会很奇怪,因为这无疑会导致问题。)“基于每个套接字启用”并不排除继承,您引用的答案是关于每个套接字与系统范围,而不是每个套接字与继承。在任何情况下,其他人所说的话都是无关紧要的。唯一重要的是主要来源,即规范性文件。根据我的经验,每个套接字选项都是由接受的套接字从侦听套接字继承的,除非故意干扰,如Java套接字的SO_RCVTIMEO选项。我的问题“当你尝试它时发生了什么”仍然存在。