Python [Errno 98] Adresse wird bereits verwendet


91

In meinem Python-Socket-Programm muss ich es manchmal mit unterbrechen Ctrl-C. Wenn ich das mache, wird die Verbindung mit geschlossen socket.close().

Wenn ich jedoch versuche, es erneut zu öffnen, muss ich eine Minute warten, bevor ich wieder eine Verbindung herstellen kann. Wie schließt man eine Steckdose richtig? Oder ist das beabsichtigt?

Antworten:


114

Ja, das ist beabsichtigt. Hier können Sie ausführliche Erklärungen lesen . Sie können dieses Verhalten überschreiben, indem Sie die Option SO_REUSEADDR für einen Socket festlegen. Beispielsweise:

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

Seltsam. Ich habe dies direkt vor dem Binden aufgerufen und der Fehler tritt immer noch auf. Ich muss woanders einen Fehler machen.
Bis zum

Trotzdem hatte ich eine bizarre Rennbedingung, als ich für meine automatisierten Tests wiederholt separate Threads band und herunterfuhr.
Bis zum

Sie müssen das Modul Socket importieren.
Bartosz

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

$ kill 81211

1
Leider funktioniert es nicht immer. Dies war mein unmittelbarer Gedanke, als ich auf dieses Problem stieß, aber in meinem Fall gibt es keinen Python-Prozess, den ich beenden könnte.
Kryten


12

weil Sie versuchen, den Dienst an demselben Port auszuführen, der bereits ausgeführt wird.

Manchmal passiert es, weil Ihr Dienst im Prozessstapel nicht gestoppt wird. du musst sie töten

Hier muss nichts installiert werden. Dies ist der einzeilige Befehl, um alle laufenden Python-Prozesse abzubrechen.

für Linux-basiertes Betriebssystem:

Bash:

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

Fisch:

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

1
Arbeitete für mich Danke!
Code

1
Arbeitete für mich Danke
user007

6

Für mich hat nichts funktioniert, außer einen Unterprozess mit diesem Befehl auszuführen, bevor ich Folgendes aufrufe HTTPServer(('', 443), myHandler):

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

Dies gilt natürlich nur für Linux-ähnliche Betriebssysteme!


5

Eine einfache Lösung, die für mich funktioniert hat, besteht darin, das Terminal zu schließen und neu zu starten.


3

Suchen Sie zunächst mit diesem Befehl die Python-Prozess-ID

ps -fA | grep python

Sie erhalten eine PID-Nummer, indem Sie Ihren Python-Prozess in der zweiten Spalte benennen

Beenden Sie dann den Prozess mit diesem Befehl

kill -9 pid

0

Erhielt den gleichen Fehler:
Schritte befolgt:
1 - verwendet $ ps -fA | grep python
2 - den gesamten Prozess beendet
3 - geschlossenes Terminal
4 - neu gestartet und die Anwendung gestartet (mkchromecast).
5 - hat diese Fehlermeldung nicht erhalten.

Ich habe ein anderes Problem. im Anschluss daran.


0

Führen Sie den Befehl aus

fuser -k (port_number_you_are _trying_to_access)/TCP

Beispiel für einen Kolben: fuser -k 5000/tcp

Denken Sie auch daran, dass dieser Fehler auftritt, wenn Sie mit Strg + z eingeben. Verwenden Sie zum Beenden Strg + C.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.