2012-04-03 3 views
3

Я прочитал man 2 listen.Какое значение отставания следует использовать?

Я не понимаю, что это значение Отставание, это говорит

Отставание аргумент определяет максимальную длину, к которому очередь ожидающих соединений для sockfd может вырасти

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

Благодаря

+0

Возможный дубликат параметра [socket listen backlog, как определить это значение?] (Http://stackoverflow.com/questions/114874/socket-listen-backlog-parameter-how-to-determine-this-value) – caf

ответ

6

В принципе, что listen() накопившихся влияет то, сколько входящие соединения в очередь, если ваше приложение не accept() ИНГ соединения, как только они приходят. Это не особенно важно для большинства применений. Максимальное значение, используемое большинством систем, равно 128, и передача, как правило, безопасна.

+0

Хорошо, если я 'listen (sockfd, 5)', должен ли я тестировать в своем 'accept()' (в моем бесконечном цикле), если 'current_nb_client <5', чтобы отправить сообщение об ошибке моему клиенту или я могу доверять backlog и обрабатывать это на стороне клиента? – mathieug

+1

Нет, это не обязательно - если вы принимаете соединения, как только они входят, длина вашего прослушивания не имеет значения. Вы можете иметь столько * активных * соединений, сколько вам нужно; прослушивание не влияет на соединения, которые не были полностью установлены. – duskwuff

+0

О, я просто понимаю! Я думал, что они не исчезают из очереди. Но нет! Это ожидающая очередь, и я просто должен «принимать()» каждый, и они исчезают из очереди. – mathieug

1

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

+0

Хорошо, если я 'listen (sockfd, 5)', должен ли я тестировать в моем 'accept()' (в моем бесконечном цикле), если 'current_nb_client <5', чтобы отправить сообщение об ошибке моему клиенту или я могу доверять backlog и обрабатывать это на стороне клиента? – mathieug

+1

При попытке подключения будет отказано, если очередь заполнена, но так маловероятно, что вы должны забыть об этом. Должно быть немного очереди, чтобы покрыть те времена, когда просто случается, что в пакет входит много запросов rquests, но, в целом, сегодняшние процессоры/память/ОС/все, что легко можно поддерживать в сети с занятыми сетями. –

+0

Я понимаю, спасибо! – mathieug