У меня есть приложение Python, которое открывает простой сокет TCP для связи с другим приложением Python на отдельном хосте.Иногда программа либо выдает ошибку, либо я ее напрямую уничтожаю, и в любом случае сокет может оставаться открытым в течение некоторого неизвестного времени.
При следующем запуске программы я получаю эту ошибку:
socket.error: [Errno 98] Address already in use
Теперь программа всегда пытается использовать один и тот же порт, поэтому кажется, что он все еще открыт.Я проверил и уверен, что программа не работает в фоновом режиме, но мой адрес все еще используется.
ТАК, как я могу вручную (или иным образом) закрыть сокет / адрес, чтобы моя программа могланемедленно повторно использовать его?
Обновление
Основываясь на ответе Майка, я проверил страницу socket(7)
и посмотрел на SO_REUSEADDR:
SO_REUSEADDR
Indicates that the rules used in validating addresses supplied in a bind(2) call should
allow reuse of local addresses. For AF_INET sockets this means that a socket may bind,
except when there is an active listening socket bound to the address. When the listen‐
ing socket is bound to INADDR_ANY with a specific port then it is not possible to bind
to this port for any local address. Argument is an integer boolean flag.