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?

Skylerl
quelle

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)
Bartosz
quelle
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
Ayoub Laaziz
quelle
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}')
MohitGhodasara
quelle
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!

Mirko
quelle
5

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

Siddharth Sethia
quelle
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
Abdul Basit
quelle
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.

silvertech048
quelle
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.

Manoj Kumar M.
quelle