下面是两个简单的python函数。首先尝试连接到666上的test.com
域(主机名有效,但端口不是)。其次尝试在端口993上连接到imap.mail.outlook.com
(主机名有效,但看起来不适合公共使用/访问)。Python的2.7 socket.timeout行为
def fn_outlook(timeout):
try:
socket.create_connection(("imap.mail.outlook.com", 993), timeout=timeout)
except socket.timeout:
pass
def fn_test(timeout):
try:
socket.create_connection(("test.com", 666), timeout=timeout)
except socket.timeout:
pass
而且这里有不同的超时该函数执行时间:
In [14]: %time fn_test(1)
CPU times: user 644 µs, sys: 1.07 ms, total: 1.71 ms
Wall time: 1 s
In [15]: %time fn_test(2)
CPU times: user 589 µs, sys: 1.15 ms, total: 1.74 ms
Wall time: 2 s
In [16]: %time fn_outlook(2)
CPU times: user 838 µs, sys: 2.24 ms, total: 3.08 ms
Wall time: 7.15 s
In [17]: %time fn_outlook(4)
CPU times: user 705 µs, sys: 1.18 ms, total: 1.88 ms
Wall time: 12 s
In [18]: %time fn_test(4)
CPU times: user 483 µs, sys: 795 µs, total: 1.28 ms
Wall time: 4.42 s
对于test.com
在timeout
参数指定的连接将在〜同一时间后超时。但对于imap.mail.outlook.com
事情变得有趣 - 套接字连接忽略超时参数。准确地说 - 不要忽略,而是在更长一段时间之后总是超时连接。
我可能以为这种行为来自imap.mail.outlook.com
服务器,而不是来自套接字模块。