c - 套接字选项是否从监听套接字跨 accept() 继承?

标签 c sockets posix

假设传递给 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/

相关文章:

c - C 中的背靠背赋值

java - ObjectInputStream/ObjectOutputStream 工作不正常

c - 为什么编译汇编时出现奇数操作数错误?

c - 你如何在 C 中创建一个指针数组?

C POSIX : read() give bad file descriptor error (in client) and select() freeze only at run time not in debug mode (in server)

java - SSL + NIO 的线程安全

unix - 为什么 SIGFPE 用于整数算术异常?

c - fork() 的目的是什么?

c - C 中的位域操作