Cha*_*e B 7 python sockets networking
我想看看 Python 中的这两个函数。我做了一些研究,遇到了这样的事情:
socket.connect_ex(地址)
与 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
Run Code Online (Sandbox Code Playgroud)
因此,connect_ex似乎效率是connect. 如果涉及到语法,唯一的区别是当它无法连接时,connect您将其包围try except并捕获错误,并connect_ex检查结果是否为 0 或 errno。一切都清楚了,但我的问题是为什么connect_ex比connect? 到底是什么原因导致了这种行为?
socket.connect(address) ->\n连接到地址处的远程套接字。(地址的格式取决于地址族 \xe2\x80\x94,请参见上文。)
\n\n如果连接被信号中断,则该方法将等待直到连接完成,或者如果信号处理程序没有\xe2\x80\x99t 引发异常并且套接字阻塞或超时,则在超时时引发 socket.timeout。对于非阻塞套接字,如果连接被信号(或信号处理程序引发的异常)中断,该方法将引发 InterruptedError 异常。
\n\n使用参数 self、address 引发审核事件 socket.connect。
\n\n在版本 3.5 中进行了更改:如果连接被信号中断,则该方法现在会等待直到连接完成,而不是引发 InterruptedError 异常,信号处理程序不会\xe2\x80\x99t 引发异常并且套接字正在阻塞或超时(请参阅 PEP 475 了解基本原理)。
\n\nsocket.connect_ex(address) ->\n与 connect(address) 类似,但返回一个错误指示符,而不是针对 C 级 connect() 调用返回的错误引发异常(其他问题,例如 \xe2\x80\x9chost 不发现,\xe2\x80\x9d 仍然可以引发异常)。如果操作成功,则错误指示符为 0,否则为 errno 变量的值。例如,这对于支持异步连接很有用。
\n\n使用参数 self、address 引发审核事件 socket.connect。
\n\n参考: https: //docs.python.org/3/library/socket.html
\n