El programa se conecta a un servidor, y cuando la conexión está cerrada por el servidor, si intento volver a conectarlo dice: socket.error: [Errno 9] Bad file descriptor
Si cierro el socket en el cliente y luego trato de reconectar, dice: socket.error: [Errno 106] Transport endpoint is already connected
.¿Cómo puedo volver a conectar un enchufe después de una tubería rota?
¿Hay alguna manera de volver a conectarlo después de una tubería rota sin crear una toma nueva?
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()
La razón de esto es que una conexión de socket se gestiona en el nivel del sistema operativo (y esto se aplica a cualquier lenguaje de programación). En Linux, se asigna un descriptor de archivo para la conexión que se destruye cuando se cierra la conexión, por lo que debe volver a conectarse, lo que crea un nuevo descriptor de archivo. – EdwardGarson