Серверная клиентская программа на С - PullRequest
0 голосов
/ 22 сентября 2011

В программе сервер-клиент сервер может прослушивать несколько клиентов.

listen(sockfd,5);

Означает ли это, что сервер может обрабатывать 5 клиентов одновременно. Или я должен использовать многопоточность для этого?

Ответы [ 4 ]

6 голосов
/ 22 сентября 2011

Нет, это означает, что 5 клиентов могут подключиться без вашего звонка accept.После того, как эти 5 клиентов подключатся (на самом деле чуть больше 5), новые подключения потерпят неудачу.

Стек «принимает» подключения (завершает квитирование) без вашего вмешательства.Так что без вашего звонка accept, если вы используете сниффер, вы увидите успешные рукопожатия.Когда вы на самом деле решаете accept(2) соединение, стек просто дает его вам.

2 голосов
/ 22 сентября 2011

Я бы сказал, да, второй параметр дает максимальную длину очереди ожидающих соединений (из справочных страниц http://linuxmanpages.com/man2/listen.2.php). И нет, многопоточность не нужна.

2 голосов
/ 22 сентября 2011

Это означает, что они представляют собой очередь из 5 соединений до того, как соединения не будут установлены, если вы не начнете их принимать. Он работает, глядя на исходный код Apache, так как я считаю, что это отличный шаблон для реализации сервера.

1 голос
/ 22 сентября 2011

Вышеприведенное выражение означает, что 5 клиентов находятся в очереди, а 6-й клиент будет игнорироваться, если очередь заполнена. Вы должны использовать accept () для чтения очереди, чтобы другие могли подключиться. Вы можете прочитать эту ссылку http://linux.die.net/man/2/connect и прочитать далее о select () для предварительного программирования сокетов. вы можете использовать многопоточность, если вы хотите обслуживать более 1 клиента одновременно с помощью fork ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...