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.