У меня есть приложение Python, которое открывает простой TCP-сокет для связи с другим приложением Python на отдельном хосте. Иногда программа будет либо ошибкой, либо я сразу ее убью, и в любом случае сокет может оставаться открытым в течение неизвестного времени.
При следующем запуске программы я получаю эту ошибку:
socket.error: [Errno 98] Address already in use
Теперь программа всегда пытается использовать один и тот же порт, поэтому он выглядит так, как будто он все еще открыт. Я проверил и уверен, что программа не работает в фоновом режиме, но мой адрес все еще используется.
SO, как я могу вручную (или иначе) закрыть сокет/адрес, чтобы моя программа могла его повторно использовать повторно?
Обновление
Основываясь на ответе Майка, я проверил страницу 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.