假设传递给 accept
的监听套接字使用 setsockopt
设置了非默认选项。这些选项(部分或全部?)是否由已接受连接的结果文件描述符继承?
最佳答案
几个套接字选项在系统的较低级别处理。虽然可以使用 setsockopt 设置大多数套接字选项。引用:man setsockopt
因为您在任何 Linux 上只提到 POSIX,一般来说,作为您的范围。 accept()
(引用:man accept
)确实有一定的自由裁量权,可以决定哪些套接字选项应该被继承,哪些选项应该从监听的 fd 中拒绝。
accept() 不会修改作为参数传递给它的原始套接字。 accept() 返回的新套接字不会从监听套接字继承文件状态标志,例如 O_NONBLOCK、O_ASYNC。
因此,与其依赖监听套接字属性的继承或非继承(这必然会因实现和许可而异),应该使用所需的套接字选项显式设置接受的套接字。(最佳实践)
手册页和您机器中的实现代码将是与 accept() 行为最相关的规范。Linux 的多个变体之间不存在通用或标准规范。
关于c - 套接字选项是否从监听套接字跨 accept() 继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5968132/