Вопрос по sockets, listen, c, backlog – Какое значение отставания я должен использовать?

7

Я прочиталчеловек 2 слушай.

Я не понимаю, какова величина отставания, это говорит

The backlog argument defines the maximum length to which the queue of pending connections for sockfd may grow

Хорошо, как я могу определить, что является лучшим значением?

Спасибо

возможный дубликатsocket listen backlog parameter, how to determine this value? caf

Ваш Ответ

2   ответа
9

listen() Влияние невыполненной работы - это количество входящих соединений, которые могут быть поставлены в очередь, если ваше приложение неaccept()Соединения, как только они входят. Это не особенно важно для большинства приложений. Максимальное значение, используемое большинством систем, составляет 128, и передача, как правило, безопасна.

О, я просто понимаю! Я думал, что они не исчезают из очереди. Но нет! Это ожидающая очередь, и мне просто нужноaccept() каждый и они исчезают из очереди. mathieug
Нет, в этом нет необходимости - до тех пор, пока вы принимаете соединения, как только они входят, длительность вашего прослушивания не имеет значения. Вы можете иметь как можно большеactive соединения, как вам нужно; Журнал ожидания прослушивания влияет только на соединения, которые не были полностью установлены.
Хорошо, если яlisten(sockfd, 5)Должен ли я проверить в моемaccept() (в моем бесконечном цикле), еслиcurrent_nb_client < 5 чтобы отправить сообщение об ошибке моему клиенту, или я могу доверять бэклогу и обрабатывать его на стороне клиента? mathieug
1

Это борьба между клиентами, пытающимися подключиться. отправка запросов на принятие в очередь, и поток / потоки принятия сосут их. Обычно темы выигрывают. Я обычно устанавливаю значение 32, но это обычно не важный параметр.

Попытка соединения будет отклонена, если очередь заполнена, но это вряд ли произойдет, и вы должны забыть об этом. Должна быть какая-то очередь, чтобы покрыть те моменты, когда случается так, что множество запросов на подключение приходит сразу, но в целом сегодняшние процессоры / память / ОС / все, что легко может справиться с загруженными сетями.
Я понимаю, спасибо! mathieug
Хорошо, если яlisten(sockfd, 5)Должен ли я проверить в моемaccept() (в моем бесконечном цикле), еслиcurrent_nb_client < 5 чтобы отправить сообщение об ошибке моему клиенту, или я могу доверять бэклогу и обрабатывать его на стороне клиента? mathieug

Похожие вопросы