GNU/Linux >> Tutoriales Linux >  >> Linux

El socket de Python no cierra la conexión correctamente

Está experimentando el TIME_WAIT estado de los enchufes conectados. Aunque haya cerrado su enchufe, todavía tiene consecuencias persistentes durante un par de minutos. Las razones de esto, así como un indicador de socket que puede establecer para deshabilitar el comportamiento (SO_REUSEADDR), se explican en la guía de preguntas frecuentes sobre sockets de UNIX.

En resumen,

server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(...)
...

Intente agregar import sys y finalice su aplicación con sys.exit(). El socket permanece reservado hasta que el sistema está satisfecho de que la aplicación está cerrada. Puede ser explícito al respecto con sys.exit()

[editar] Ah, está bien. Soy bastante nuevo en los enchufes. Entonces, ¿estás diciendo que esta secuencia no es segura? No puedo imaginar otra manera de hacerlo. Tienes que cerrar tu aplicación en algún momento, con alguna técnica, ¿verdad? ¿Cómo se hace correctamente entonces?

server.shutdown(socket.SHUT_RDWR) 
server.close()
sys.exit()

Linux
  1. Cómo:Programación de sockets en Python

  2. Cómo permitir la conexión remota al servidor de base de datos MySQL

  3. Cómo destruir completamente una conexión de socket en C

  4. ¿Cómo elimino una conexión de enchufe CLOSE_WAIT?

  5. Conexión SMTP del servidor PHPMailer GoDaddy rechazada

Cómo configurar un servidor de archivos básico usando simpleHTTPserver

Solución:no se puede establecer una conexión FTP a un servidor SFTP en FileZilla

Solución de problemas:errores de conexión del servidor

Reparación de error de tubería rota con conexión SSH

Cómo conectarse a SQL Server desde Linux

Creando un socket sin procesar en Python sin privilegios de root