Что говорит мне «Только одно использование каждого адреса сокета» при использовании сокетов под Python? - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть сервер сокетов под Python:

sock= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setblocking(0)
sock.bind((self._ipadress, port))

позже я принимаю входящие запросы в цикле, используя select.select:

connection, client_address = sock.accept()
...
select.select(...)

Обратите внимание, чтоклиенты могут закрывать соединения, когда они в них больше не нуждаются.

Я проверил свой код на клиенте Python и смог наблюдать, что несколько соединений можно легко обрабатывать одновременно, как и ожидалось.

Однако, очень редко я получаю сообщение об ошибке:

«Обычно разрешено только одно использование каждого адреса сокета»

Что это говорит мне икогда это происходит?

Однозначно возможно несколько подключений к одному и тому же порту (я это проверял), так почему разрешается использовать только одно использование?Это противоречит принципу, согласно которому один и тот же сервер может принимать несколько клиентов.

Я узнал от

Python-сервер "Обычно разрешено только одно использование каждого адреса сокета"

, чего можно избежать с помощью SO_REUSEADDR.Но почему это необходимо, так как даже после закрытия соединения клиентом сокет все равно сможет принимать другие соединения.В противном случае моя программа не будет работать вообще.

Я сейчас дома, а не в офисе, поэтому я не могу проверить это, но у меня даже проблемы с пониманием принципов, лежащих в основе ...

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...