我想查看Python中的这两个函数。我做了一些研究,发现了这样的东西:
socket.connect_ex(address)
类似于connect(address),但返回一个错误指示器,而不是为C级别的connect()调用返回的错误引发异常(其他问题,例如“未找到主机”,仍可能引发异常)。 如果操作成功,则错误指示器为0,否则为errno变量的值。 这对于支持异步连接非常有用。
我完全理解了。我编写了一个简单的端口扫描程序来测试效率,并获得了有趣的结果:
[*] start scanning on host 127.0.0.1 for ports range(0, 65535) with
method(connect)
[*] method connect finished in 0:00:12.253352
[*] start scanning on host 127.0.0.1 for ports range(0, 65535) with
method(connect_ex)
[*] method connect_ex finished in 0:00:06.839319
所以,connect_ex
看起来比 connect
效率高一倍。就语法而言,唯一的区别是你要用 try except
包围 connect
,并在连接失败时捕获错误;而对于 connect_ex
,你需要检查结果是否为 0 或 errno。这点很清楚,但我的问题是,为什么 connect_ex
比 connect
运行得更快呢?有什么原因导致这种行为?