Что означает SOMAXCONN в программировании сокета C?

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

listen(sockfd,SOMAXCONN);

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

Ответы

Ответ 1

#include <sys/socket.h>

int listen (int socket, int backlog);

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

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

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

Как видно здесь.

Ответ 2

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

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

Подробнее об этом можно прочитать в странице руководства