我找不到任何这文件除了从一些Python documentation为什么SO_RCVTIMEO从侦听套接字继承到接受的套接字?
18.1.4.2。超时和接受方法
如果
getdefaulttimeout()
不是None
,则由accept()
方法返回的套接字将继承该超时。否则,行为取决于侦听套接字的设置:如果侦听套接字处于阻塞模式或处于超时模式,则由
accept()
返回的套接字处于阻塞模式;如果侦听套接字处于非阻塞模式,则由
accept()
返回的套接字是处于阻塞还是非阻塞模式取决于操作系统。如果您想确保跨平台行为,建议您手动覆盖此设置。
我看过这个[question]:Are socket options inherited across accept() from the listening socket?,我觉得最后的判决仍然是执行定义的。我猜测在平台上比从每个内核读取源代码要容易。
这里它清楚地表明超时选项被继承。但在接受(2)的手册中,没有提到这一点。当我在我的一个盒子(嵌入式Linux盒子)上调试了一些C++代码时,我发现这非常令人震惊。我预计接受的套接字不会继承此选项。
我在哪里可以找到这个问题的明确答案?
我明白了。所以Python实际上强制执行此行为,而不是accept()本身。我正在阅读Linux内核代码,接受()[link](http://lxr.linux.no/#linux+v3.8.8/net/tipc/socket.c#L1510)的实现,到目前为止真的很困惑。 – 2013-04-26 03:12:28
@WangWei看起来我把原来的问题误解为Python问题而不是C问题。查看更新的答案。 – Aya 2013-04-26 09:03:11
谢谢。这是一个非常有见地的答案。 – 2013-04-27 08:00:20