Python套接字连接超时问题

4

我正在尝试编写一个简单的脚本,连接到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个回答

1

网络总是会出现间歇性问题,你的代码需要处理这些问题。我建议采取两个层次的行动。首先,在socket.create_connection上使用timeout=参数来等待更长时间,然后将套接字打开放在try except socket.timeout对中,并重试几次,可能在重试之间睡眠一秒或两秒。


1
感谢您的回答。我认为这是一个Python问题的原因是,我可以使用IRC客户端(irssi)连接得很好。我还运行了一次到irc.freenode.net的traceroute,并没有发现任何主要瓶颈。 - Michael Smith
1
如果你认为你发现了一个可以重现的错误,那么你应该在http://bugs.python.org/上报告它。 - Michael Dillon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接