У меня есть сервер сокетов под 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
.Но почему это необходимо, так как даже после закрытия соединения клиентом сокет все равно сможет принимать другие соединения.В противном случае моя программа не будет работать вообще.
Я сейчас дома, а не в офисе, поэтому я не могу проверить это, но у меня даже проблемы с пониманием принципов, лежащих в основе ...
.