2013-08-06 3 views
15

Я ничего не понял о somaxconn в программировании сокетов в C (Linux Ubuntu). Я искал несколько сайтов, но все это не могло мне помочь.Что означает SOMAXCONN в программировании сокета C?

listen(sockfd,SOMAXCONN); 

Означает ли это, что одновременно слушать максимум. подключенных разъемов?

ответ

14
#include <sys/socket.h> 

int listen (int socket, int backlog); 

Отставание аргумент дает намек на осуществление которой реализация должна использовать, чтобы ограничить количество размещенных соединений в очереди ожидания сокета. Реализации могут налагать ограничение на отставание и молча уменьшить указанное значение. Как правило, большее значение аргумента backlog должно приводить к большей или равной длине очереди прослушивания. Реализации должны поддерживать значения отставания до SOMAXCONN, определенные в <sys/socket.h>.

listen() Если вызываются с значением аргумента отставания, которое меньше, чем 0, то функция ведет себя, как если бы она была вызвана со значением аргумента непереданного 0.

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

Как видно here.

+2

Для тех, кто, возможно, потребуется, чтобы легко запомнить, что означает SOMAXCONN, я думаю, что это сокращение от Оправа Выдающаяся MAX Connections. Я мог ошибаться, но это все равно помогает мне запомнить! :-) – rhgrant10

+3

Или, что более вероятно, и в большей степени совместимо с другими сокетами BSD #defines, SOcket MAXimum CONNections или SOcket MAXimum CONNection Number – uchuugaka

+0

Используйте форматирование цитат для цитируемого текста. – EJP

7

Проще говоря, отставание - это максимальное количество подключенных к очереди соединений в сокете. Эта очередь есть, поэтому вы можете обрабатывать соединение с клиентом, в то время как другие ждут в очереди, backlog указывает, как долго вы хотите этого чтобы быть. если больше клиентов попытаются подключиться к вашему серверу, больше, чем отставание, эти соединения будут удалены.

SOMAXCONN определяет максимальное количество, что вам разрешено переходить на listen(), что составляет 128 в моей системе.

Вы можете прочитать об этом в man page

+0

Эти подключения будут удалены Windows. Они будут игнорироваться другими платформами, что заставит клиента повторить попытку пару раз, а затем тайм-аут, если не будет ответа. – EJP

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