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

jac*_*des 6 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()
Run Code Online (Sandbox Code Playgroud)

nos*_*nos 12

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

不.你必须关闭旧的并创建一个新的插座,

  • 其原因是套接字连接是在操作系统级别进行管理的(并且对于任何编程语言都适用)。在Linux下,为连接分配了一个文件描述符,该文件描述符在连接关闭时被销毁,因此您需要重新连接以创建一个新的文件描述符。 (2认同)