2014-11-15 2 views
1

Я создаю серверное приложение, и у меня есть вопрос, который я не могу найти, чтобы найти ответы в Интернете.Hows делает размер очереди для прослушивания() работы?

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

В listen() мы устанавливаем в качестве аргументов файловый дескриптор для сокета и размер очереди. Теперь, учитывая, что очередь будет означать, сколько из них ждет, когда число «свободных» пятен в очереди увеличилось? Когда дочерний процесс начинает обслуживать клиента или когда «обслуживание» завершено и клиент отключается от сервера?

+2

Каждое возвращение из. 'accept' освободит слот. – didierc

ответ

4

Параметр backlog - listen() устанавливает максимальное количество входящих соединений в очереди операционной системы для приложения.

Очередь входящих соединений берется из этой очереди в момент успешного применения приложения accept() с соединением.


Примечание:

накопившегося соединение входящих соединения, которые происходят, чтобы попасть в систему, когда вы находитесь в процессе дублирования сокета, разветвление нового процесса и accept(2) ИНГ их. Обычно система выделяет по умолчанию значение 5 для этой очереди, почти все время достаточно для обычных целей. Обычно ваш процесс accept(2) s в несвязанном сокете сервера для нового соединения, затем готовит fork и передает подпроцесс копию связанного сокета, прежде чем вы снова зайдите на accept(2). В то же время новое соединение может получать доход, и система поставлена ​​в очередь, чтобы процесс возвращался к вызову accept(2). С очередью, допустим, 10, система будет ставить в очередь это количество входящих соединений, прежде чем начинать их отбрасывать (сообщение об отказе от отказа в этом случае)

+0

Еще раз спасибо за помощь –

Смежные вопросы