Недопустимый тайм-аут модуля сокета Python при использовании create_connection - PullRequest
0 голосов
/ 08 марта 2019

Я реализовал некоторую логику для моего приложения для подключения к серверу через сокеты.Поскольку пользователь будет вводить имя хоста и порт, мне нужно использовать тайм-аут, чтобы приложение не зависло.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...