Python套接字连接超时问题

4 投票
1 回答
2857 浏览
提问于 2025-04-16 18:34

我正在尝试写一个简单的脚本,连接到freenode IRC网络(地址是irc.freenode.net,端口是6667),定期在一个频道上发布信息。为此,我使用了Python的套接字(socket)。以前这个方法一直很好用,但现在我遇到了一个奇怪的问题:套接字连接的时间非常长,有时甚至连接不上(偶尔会超时)。不过,这种情况只发生在从文件运行脚本的时候。如果直接在解释器里输入代码,就没问题:

>>> 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= 参数,这样可以让程序多等一会儿再放弃连接。然后,把打开 socket 的代码放在 tryexcept socket.timeout 之间,这样如果出现超时的情况,可以尝试重新连接几次,可能在每次重试之间等一两秒。

撰写回答