Python套接字连接超时问题

时间:2011-05-29 18:09:53

标签: python sockets python-3.x

我正在尝试编写一个连接到freenode IRC网络(端口6667上的irc.freenode.net)的简单脚本,以定期在频道上发布信息。为此,我使用的是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 个答案:

答案 0 :(得分:1)

网络总是存在间歇性问题,您的代码需要处理它们。我建议采取两个层面的行动。首先,使用timeout=上的socket.create_connection参数等待一段时间再放弃。然后将套接字开口放在try except socket.timeout对内并重试几次,可能在重试之间休息一两秒钟。