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