使用create_connection时,Python套接字模块的超时不一致

时间:2019-03-08 09:07:06

标签: python sockets timeout

我正在实现一些逻辑,以使我的应用程序可以通过套接字连接到服务器。由于用户将输入主机名和端口,因此我需要使用超时来确保应用程序不会卡住。

这样做的时候,我意识到了一些奇怪的事情。 create_connection的超时因我连接到的站点而异,甚至不接近我传递域名而不是IP时指定的超时参数。

我认为一个例子可以使解释容易得多。这段代码为我输出了接近4的值。

import socket
import time

hostname = "stackoverflow.com"
port = 22222 # This can be some random invalid port

start = time.time()
try:
    socket.create_connection(
        (hostname, port),
        timeout = 1
    )
except:
    print(time.time() - start)

但是下面的代码打印的值接近1,这是预期的结果

import socket
import time

hostname = "stackoverflow.com"
port = 22222 # This can be some random invalid port

start = time.time()
ip = socket.gethostbyname(hostname)
try:
    socket.create_connection(
        (ip, port),
        timeout = 1
    )
except:
    print(time.time() - start)

因此,如果我事先解析IP地址,该代码将起作用。但是我对造成这种情况的原因感到好奇。有人可以向我解释吗?

0 个答案:

没有答案