Il programma si connette a un server e quando la connessione viene chiusa dal server, se provo a riconnetterlo dice: socket.error: [Errno 9] Bad file descriptor
Se chiudo lo zoccolo nel client e quindi provo a riconnetterlo, si dice: socket.error: [Errno 106] Transport endpoint is already connected
.Come posso ricollegare una presa dopo un tubo rotto?
C'è un modo per ricollegarlo dopo un tubo rotto senza creare un nuovo 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()
Il motivo è che una connessione socket viene gestita a livello di sistema operativo (e ciò vale per qualsiasi linguaggio di programmazione). Sotto Linux, viene assegnato un descrittore di file per la connessione che viene distrutta quando la connessione viene chiusa, quindi è necessario riconnettersi per creare un nuovo descrittore di file. – EdwardGarson