管道损坏后如何重新连接插座?

时间:2011-09-20 14:10:47

标签: python sockets

程序连接到服务器,当服务器关闭连接时,如果我尝试重新连接它,请说: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 个答案:

答案 0 :(得分:12)

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

没有。您必须关闭旧的套接字并创建一个新的套接字

答案 1 :(得分:2)

如果文件描述符不正确,那么您将需要释放该资源并创建一个新套接字。这将为您提供一个新的文件描述符。

如果连接异常终止,则必须等待服务器关闭它的连接结束才能重新连接。我会经常轮询它(但不要太频繁),看看你是否可以重新建立与新套接字的连接。

您多久出现一次错误的管道错误?