下面是兩個簡單的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
服務器,而不是來自套接字模塊。