Ответ 1
Да, это предназначено. Здесь вы можете прочитать подробное объяснение. Это поведение можно переопределить, установив параметр SO_REUSEADDR в гнездо. Например:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
В моей программе сокетов Python мне иногда приходится прерывать ее с помощью Ctrl-C. Когда я это делаю, он закрывает соединение, используя socket.close()
.
Однако, когда я пытаюсь снова открыть его, я должен подождать, что кажется минутой, прежде чем я смогу подключиться снова. Как правильно закрыть розетку? Или это предназначено?
Да, это предназначено. Здесь вы можете прочитать подробное объяснение. Это поведение можно переопределить, установив параметр SO_REUSEADDR в гнездо. Например:
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
Если вы используете TCPServer, UDPServer или их подклассы в модуле SocketServer, вы можете установить эту переменную класса (до запуска сервера):
SocketServer.TCPServer.allow_reuse_address = True
(через SocketServer.ThreadingTCPServer - не удается привязать адрес после перезапуска программы)
Это приводит к init (конструктору):
if self.allow_reuse_address:
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Простое решение, которое сработало для меня, это закрыть Терминал и перезапустить его.
Ничего не работало для меня, кроме запуска подпроцесса с этой командой, перед вызовом HTTPServer (('', 443) myHandler):
kill -9 $(lsof -ti tcp: 443)
Конечно, это только для Linux-подобных ОС!
потому что вы пытаетесь запустить службу в том же порту, который уже работает.
Некоторое время это происходит, потому что ваш сервис не остановлен в стеке процессов. ты должен их убить
нет необходимости устанавливать что-либо здесь, это однострочная команда для уничтожения всех запущенных процессов python.
для ОС на базе Linux:
Bash:
kill -9 $(ps -A | grep python | awk '{print $1}')
Рыба:
kill -9 (ps -A | grep python | awk '{print $1}')
Получена та же ошибка:
Последовавшие шаги:
1 - используется $ ps -fA | grep python
2 - убил весь процесс
3 - Закрытый терминал
4 - перезапустил и запустил приложение (mkchromecast).
5 - не получено это сообщение об ошибке.
Есть еще одна проблема.
в продолжение этого.