无法为connect\u ex call设置超时?

2024-09-24 00:34:59 发布

您现在位置:Python中文网/ 问答频道 /正文

在尝试解决随机连接拒绝错误时,connect\u ex会使用Setting timeout via socket.settimeout

最近注意到,在Raspbian OS 9(Stretch)上运行的Python3.5.3,即Raspberry Pi上的Debian,使用TCP套接字,在获得良好的连接之前,立即返回111和103个错误,最近没有代码更改。当连接实际发生时,服务器端正在按预期接受连接。似乎最近操作系统或python3中的一些代码更改使连接顺序变得不那么宽容了?但令人沮丧的是,我似乎无法改变连接的时间,所以让连接更宽容

theSocket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
theTimeOut=socket.getdefaulttimeout()
theSocket.settimeout(5.0)
theResult=theSocket.connect_ex((theHost, thePort))
theSocket.settimeout(theTimeOut)

用上面的代码进行测试,我得到两个场景中的一个。。。连接几乎立即按预期建立,结果为零。大约50%的时候会这样。另一种情况是我得到了重复的套接字111和103错误,并且没有连接,这些错误会立即返回,而不是像预期的那样在5秒钟后返回

我用一个简单的循环来处理连接失败,通常情况下,如果无法立即获得连接,则需要1到7次尝试(等待1秒)才能获得良好的连接。快速或慢速连接,如果你愿意,似乎是完全随机模式。看“顶”的树莓皮几乎是完全闲置。。。没有明显的尖峰或负载问题

服务器进程上的accept调用没有任何错误或问题,一旦建立连接,我就不会删除或丢失任何数据。如果你愿意的话,这只是一个初始的连接请求,我看到了这种非常奇怪的行为

我所知道的代码是有效的,但我想避免使用这种非常暴力的解决方案

哦,还有syslog,dmesg等等。没有任何明显或明确的问题迹象。加载一个完全干净的Raspbian操作系统副本,同样的行为结果。根据系统配置,没有适用的防火墙或安全设置。这种行为发生在多个设备上,运行相同版本的操作系统和python3.5.3(最新的完全修补版)


Tags: 代码osconnect错误timeout情况socketsetting