程序连接到服务器,当服务器关闭连接时,如果我尝试重新连接它,请说: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()
答案 0 :(得分:12)
假设这是一个面向连接的套接字:
没有。您必须关闭旧的套接字并创建一个新的套接字
答案 1 :(得分:2)
如果文件描述符不正确,那么您将需要释放该资源并创建一个新套接字。这将为您提供一个新的文件描述符。
如果连接异常终止,则必须等待服务器关闭它的连接结束才能重新连接。我会经常轮询它(但不要太频繁),看看你是否可以重新建立与新套接字的连接。
您多久出现一次错误的管道错误?