Проблема тайм-аута соединения с сокетами Python - PullRequest
4 голосов
/ 29 мая 2011

Я пытаюсь написать простой скрипт, который подключается к IRC-сети freenode (irc.freenode.net через порт 6667), чтобы периодически публиковать информацию на канале.Для этого я использую сокеты Python.В прошлом это работало нормально, однако сейчас я испытываю странную проблему: сокету требуется невероятно много времени для соединения, если оно вообще происходит (время от времени истекает).Однако это происходит только тогда, когда скрипт запускается из файла.При непосредственном вводе в интерпретатор все работает нормально:

>>> import socket
>>> def f():
>>>    s = socket.socket()
>>>    print("Connecting")
>>>    s.connect(('irc.freenode.net', 6667))
>>>    print("Connected")
>>>    s.close()
>>> f()

Сокет подключается примерно через секунду, и все в порядке.Однако, если я помещаю следующий код в файл и запускаю python test.py , он зависает на s.connect и время от времени истекает:

import socket
s = socket.socket()
print("Connecting")
s.connect(('irc.freenode.net', 6667))
print("Connected")
s.close()

У меня никогда не было этой проблемыдо.Это также происходит на других компьютерах в моей сети (может быть, это проблема сети?).Я использую Python 3.2.Благодарю.

1 Ответ

1 голос
/ 30 мая 2011

В сетях всегда возникают периодические проблемы, и ваш код должен их решать.Я предлагаю два уровня действий.Во-первых, используйте аргумент timeout= на socket.create_connection, чтобы немного подождать, прежде чем сдаться.Затем поместите отверстие гнезда в пару try except socket.timeout и повторите попытку несколько раз, возможно, спите секунду или две между попытками.

...