如何在管道断裂后重新连接套接字?

9 投票
2 回答
18190 浏览
提问于 2025-04-17 02:41

这个程序是用来连接到一个服务器的,当服务器关闭连接后,如果我尝试重新连接,就会出现这样的错误信息:socket.error: [Errno 9] Bad file descriptor
如果我在客户端关闭了这个连接,然后再尝试重新连接,就会出现另一个错误:socket.error: [Errno 106] Transport endpoint is already connected


有没有办法在连接断开后重新连接,而不需要新建一个连接呢?

import socket
host = '127.0.0.1'
port = 1337
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def loop():
    try:
        while 1:
            print s.recv(512)
    except socket.error:
        #s.close()?
        connect()
def connect():
    s.connect((host, port))
    loop()
connect()

2 个回答

3

如果文件描述符有问题,那你就需要释放这个资源,然后创建一个新的套接字。这样你就能得到一个新的文件描述符。

如果连接异常中断,你需要等服务器关闭它那边的连接,才能重新连接。我建议你可以适当地频繁检查一下,看看能不能用新的套接字重新建立连接,但不要检查得太频繁。

你多久会遇到一次坏管道错误?

14

假设这是一个面向连接的套接字:

不可以。你必须先关闭旧的套接字,然后再创建一个新的套接字。

撰写回答