Python [Errno 98] Indirizzo già in uso


91

Nel mio programma socket Python, a volte ho bisogno di interromperlo con Ctrl-C. Quando lo faccio, chiude la connessione usando socket.close().

Tuttavia, quando provo a riaprirlo, devo aspettare un minuto prima di potermi connettere di nuovo. Come si chiude correttamente una presa? O è intenzionale?

Risposte:


115

Sì, è inteso. Qui puoi leggere una spiegazione dettagliata . È possibile ignorare questo comportamento impostando l'opzione SO_REUSEADDR su un socket. Per esempio:

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

Strano. L'ho chiamato subito prima del binding e l'errore si verifica ancora. Devo commettere un errore da qualche altra parte.
— byxor

Non importa, ho avuto una condizione di gara bizzarra quando ripetutamente si collegava e si chiudeva su thread separati per i miei test automatizzati.
— byxor

Devi importare un modulo chiamato socket.
— Bartosz

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

$ kill 81211

1
Purtroppo non sempre funziona. Questo è stato il mio pensiero immediato quando mi sono imbattuto in questo problema, ma nel mio caso non esiste un processo Python da uccidere.
— Kryten


12

perché stai tentando di eseguire il servizio nella stessa porta che è già in esecuzione.

qualche volta accade perché il tuo servizio non è fermo nello stack del processo. devi ucciderli

non è necessario installare nulla qui è il comando di una riga per uccidere tutti i processi Python in esecuzione.

per SO basato su Linux:

Bash:

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

Pesce:

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

1
Ha funzionato per me Grazie!
— Codice

1
Ha funzionato per me Grazie
— user007

6

Niente ha funzionato per me tranne l'esecuzione di un sottoprocesso con questo comando, prima di chiamare HTTPServer(('', 443), myHandler):

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

Naturalmente questo è solo per sistemi operativi simili a Linux!


5

Una semplice soluzione che ha funzionato per me è chiudere il Terminale e riavviarlo.


4

Prima di tutto trova l'ID del processo python usando questo comando

ps -fA | grep python

Otterrai un numero pid nominando il tuo processo Python sulla seconda colonna

Quindi termina il processo usando questo comando

kill -9 pid

0

Ottenuto lo stesso errore:
Passaggi seguiti:
1 - usato $ ps -fA | grep python
2 - Interrotto tutto il processo
3 - Terminale chiuso
4 - rilanciato e lanciato l'applicazione (mkchromecast).
5 - non ho ricevuto questo messaggio di errore.

Ho un altro problema. seguito da quello.


0

eseguire il comando

fuser -k (port_number_you_are _trying_to_access)/TCP

esempio per pallone: fuser -k 5000/tcp

Inoltre, ricorda che questo errore si verifica quando interput con ctrl + z. quindi per terminare usa ctrl + c

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.