Объясните сокеты буфера пожалуйста
Я пытался найти примеры программирования сокетов и наткнулся на этот скрипт: http://stacklessexamples.googlecode.com/svn/trunk/examples/networking/mud.py
При чтении этого скрипта я нашел следующую строку: listenSocket.listen(5)
Насколько я понимаю - он читает 5 байтов из буфера, а затем делает вещи с ним...
но что произойдет, если другой конец отправит более 5 байтов?
в другом месте этого скрипта он проверяет ввод для 4 команд и проверяет, есть ли в строке \r\n. Разве такие команды, как "look" плюс \r\n, составляют более 5 байт?
Алан
3 ответа
Следующее применимо к сокетам в целом, но оно должно помочь ответить на ваш конкретный вопрос об использовании сокетов из Python.
socket.listen() используется на сокете сервера для прослушивания входящих запросов на соединение.
Параметр, передаваемый для прослушивания, называется backlog, и это означает, сколько соединений должен принимать сокет и помещать в ожидающий буфер до тех пор, пока вы не завершите свой вызов accept(). Это относится к соединениям, которые ожидают подключения к сокету вашего сервера между временем, когда вы вызвали listen(), и временем, когда вы завершили соответствующий вызов метода accept().
Итак, в вашем примере вы устанавливаете отставание на 5 соединений.
Обратите внимание... если вы установите в своем списке 5 соединений, следующие соединения (6-е, 7-е и т. Д.) Будут сброшены, и соединительный сокет получит сообщение о соединении с ошибкой (что-то вроде сообщения "хост активно отказался от соединения")
Это может помочь вам понять код: http://www.amk.ca/python/howto/sockets/
Аргумент 5
в listenSocket.listen
не количество байтов для чтения или буферизации, это backlog
:
socket.listen(backlog)
Прослушайте соединения, сделанные в розетку. Аргумент backlog указывает максимальное количество подключений в очереди и должен быть не менее 1; максимальное значение зависит от системы (обычно 5).