Подтвердить что ты не робот

Python [Errno 98] Адрес уже используется

В моей программе сокетов Python мне иногда приходится прерывать ее с помощью Ctrl-C. Когда я это делаю, он закрывает соединение, используя socket.close().

Однако, когда я пытаюсь снова открыть его, я должен подождать, что кажется минутой, прежде чем я смогу подключиться снова. Как правильно закрыть розетку? Или это предназначено?

4b9b3361

Ответ 1

Да, это предназначено. Здесь вы можете прочитать подробное объяснение. Это поведение можно переопределить, установив параметр SO_REUSEADDR в гнездо. Например:

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

Ответ 2

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

$ kill 81211

Ответ 3

Если вы используете 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)

Ответ 4

Простое решение, которое сработало для меня, это закрыть Терминал и перезапустить его.

Ответ 5

Ничего не работало для меня, кроме запуска подпроцесса с этой командой, перед вызовом HTTPServer (('', 443) myHandler):

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

Конечно, это только для Linux-подобных ОС!

Ответ 6

потому что вы пытаетесь запустить службу в том же порту, который уже работает.

Некоторое время это происходит, потому что ваш сервис не остановлен в стеке процессов. ты должен их убить

нет необходимости устанавливать что-либо здесь, это однострочная команда для уничтожения всех запущенных процессов python.

для ОС на базе Linux:

Bash:

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

Рыба:

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

Ответ 7

Получена та же ошибка:
Последовавшие шаги:
1 - используется $ ps -fA | grep python
2 - убил весь процесс
3 - Закрытый терминал
4 - перезапустил и запустил приложение (mkchromecast).
5 - не получено это сообщение об ошибке.

Есть еще одна проблема. в продолжение этого.