程序連接到服務器,然後在連接被服務器關閉時,如果我嘗試重新連接它說:socket.error: [Errno 9] Bad file descriptor
如果我關閉套接字在客戶端,然後我嘗試重新連接時,它說:socket.error: [Errno 106] Transport endpoint is already connected
。如何在損壞的管道後重新連接插座?
有沒有辦法破管後重新連接,而無需創建一個新的socket?
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()
原因是套接字連接是在操作系統級別進行管理的(並且這適用於任何編程語言)。在Linux下,爲連接分配一個文件描述符,連接關閉時將銷燬該連接,因此您需要重新連接以創建新的文件描述符。 – EdwardGarson