Python [Errno 98] Адрес уже используется - PullRequest
75 голосов
/ 17 декабря 2010

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

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

Ответы [ 6 ]

97 голосов
/ 17 декабря 2010

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

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
22 голосов
/ 13 июня 2016
$ ps -fA | grep python
501 81211 12368   0  10:11PM ttys000    0:03.12  
python -m SimpleHTTPServer

$ kill 81211
15 голосов
/ 27 августа 2014

Если вы используете 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)
3 голосов
/ 15 июля 2018

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

2 голосов
/ 22 мая 2017

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

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

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

1 голос
/ 25 января 2019

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

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

не нужно ничего устанавливать здесь команда в одну строку для уничтожения всех запущенных процессов Python.

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

Bash:

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

Рыба:

kill -9 (ps -A | grep python | awk '{print $1}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...