Я реализовал некоторую логику для моего приложения для подключения к серверу через сокеты.Поскольку пользователь будет вводить имя хоста и порт, мне нужно использовать тайм-аут, чтобы приложение не зависло.
При этом я понял кое-что странное.Тайм-аут для 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-адрес заранее.Но мне любопытно, что является причиной этого.Кто-нибудь может мне это объяснить?