Python [Errno 98] La dirección ya está en uso


96

En mi programa de socket de 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 antes de poder conectarme de nuevo. ¿Cómo se cierra correctamente un enchufe? ¿O es esto intencionado?

Respuestas:


120

Sí, está destinado. Aquí puede leer una 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)

Extraño. Lo llamé justo antes de enlazar y el error aún se produce. Debo estar cometiendo un error en otra parte.
byxor

No importa, tuve una condición de carrera extraña al enlazar y cerrar repetidamente en subprocesos separados para mis pruebas automatizadas.
byxor

Necesita importar el módulo llamado socket.
Bartosz

32
$ ps -fA | grep python
501 81211 12368   0  10:11PM ttys000    0:03.12  
python -m SimpleHTTPServer

$ kill 81211

2
Desafortunadamente, no siempre funciona. Este fue mi pensamiento inmediato cuando me encontré con este problema, pero no hay un proceso de Python para matar en mi caso.
Kryten


14

porque está intentando ejecutar el servicio en el mismo puerto que ya se está ejecutando.

en algún momento sucede porque su servicio no se detiene en la pila de procesos. tienes que matarlos

no es necesario instalar nada aquí es el comando de una línea para matar todos los procesos de Python en ejecución.

para SO basado en Linux:

Intento:

kill -9 $(ps -A | grep python | awk '{print $1}')

Pescado:

kill -9 (ps -A | grep python | awk '{print $1}')

1
Funcionó para mí ¡Gracias!
Código



7

Nada funcionó para mí, excepto ejecutar un subproceso con este comando, antes de llamar HTTPServer(('', 443), myHandler):

kill -9 $(lsof -ti tcp:443)

¡Por supuesto, esto es solo para sistemas operativos similares a Linux!


4

En primer lugar, busque el ID del proceso de Python usando este comando

ps -fA | grep python

Obtendrá un número pid al nombrar su proceso de Python en la segunda columna

Luego mata el proceso usando este comando

kill -9 pid

0

Obtuve el mismo error:
Pasos seguidos:
1 - usado $ ps -fA | grep python
2 - Matado todo el proceso
3 - Terminal cerrado
4 - relanzado y lanzado la aplicación (mkchromecast).
5 - no recibí este mensaje de error.

Tengo otro problema. siguiendo eso.


0

ejecutar el comando

fuser -k (port_number_you_are _trying_to_access)/TCP

ejemplo de matraz: fuser -k 5000/tcp

Además, recuerde que este error surge cuando intercala ctrl + z. así que para terminar use ctrl + c

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.