In meinem Python-Socket-Programm muss ich es manchmal mit unterbrechen Ctrl-C. Wenn ich das tue, wird die Verbindung mit socket.close()
geschlossen.
Wenn ich jedoch versuche, es wieder 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?
Ja, es ist beabsichtigt. Hier können Sie ausführliche Erklärung lesen. Dieses Verhalten kann durch Setzen der Option SO_REUSEADDR für einen Socket überschrieben werden. Zum Beispiel:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
$ ps -fA | grep python
501 81211 12368 0 10:11PM ttys000 0:03.12
python -m SimpleHTTPServer
$ kill 81211
Wenn Sie einen TCPServer, einen UDPServer oder dessen Unterklassen im SocketServer-Modul verwenden, können Sie diese Klassenvariable festlegen (vor dem Instanziieren eines Servers)
SocketServer.TCPServer.allow_reuse_address = True
Dies bewirkt, dass init (Konstruktor):
if self.allow_reuse_address:
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Nichts hat für mich funktioniert, außer einen Subprozess mit diesem Befehl auszuführen, bevor HTTPServer (('', 443), myHandler) aufgerufen wird:
töte -9 $ (lsof -ti tcp: 443)
Natürlich ist dies nur für Linux-ähnliche Betriebssysteme!
Eine einfache Lösung, die für mich funktioniert hat, ist das Terminal zu schließen und neu zu starten.
Habe den gleichen Fehler:
Schritte befolgt:
1 - gebraucht $ ps -fA | grep python
2 - Beendet den gesamten Prozess
3 - Geschlossenes Terminal
4 - relaunchte und startete die Anwendung (mkchromecast).
5 - Diese Fehlermeldung wurde nicht angezeigt.
Ich habe ein anderes Problem. das weiterverfolgen.
weil Sie versuchen, den Dienst in demselben Port auszuführen, der bereits ausgeführt wird.
dies geschieht manchmal, weil Ihr Dienst nicht im Prozessstack angehalten wird. Du musst sie töten
hier ist der einzeilige Befehl, um alle laufenden Python-Prozesse zu beenden.
für Linux-basiertes Betriebssystem:
kill -9 (ps -A | grep python | awk '{print $1}')