我正在实现一些逻辑,以使我的应用程序可以通过套接字连接到服务器。由于用户将输入主机名和端口,因此我需要使用超时来确保应用程序不会卡住。
这样做的时候,我意识到了一些奇怪的事情。 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地址,该代码将起作用。但是我对造成这种情况的原因感到好奇。有人可以向我解释吗?