real - Dirección de Python[Errno 98] ya en uso
socket python 3 español (4)
Nada funcionó para mí, excepto ejecutar un subproceso con este comando, antes de llamar a HTTPServer (('''', 443), myHandler):
matar -9 $ (lsof -ti tcp: 443)
¡Por supuesto, esto es solo para el sistema operativo tipo Linux!
En mi programa de socket Python, a veces necesito interrumpirlo con Ctrl-C . Cuando hago esto, cierra la conexión usando socket.close()
.
Sin embargo, cuando intento volver a abrirlo, tengo que esperar lo que parece un minuto para poder volver a conectarme. ¿Cómo se cierra correctamente un socket? ¿O es esto intencional?
Sí, está destinado. Aquí puedes leer la explicación detallada . Es posible anular este comportamiento configurando la opción SO_REUSEADDR en un socket. Por ejemplo:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Si usa un TCPServer, UDPServer o sus subclases en el módulo SocketServer, puede establecer esta variable de clase (antes de instanciar un servidor):
SocketServer.TCPServer.allow_reuse_address = True
(a través de SocketServer.ThreadingTCPServer - No se puede enlazar a la dirección después del reinicio del programa )
Esto hace que init (constructor):
if self.allow_reuse_address:
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
$ ps -fA | grep python
501 81211 12368 0 10:11PM ttys000 0:03.12
python -m SimpleHTTPServer
$ kill 81211