books.google.com/...

я есть следующая проблема:

у меня естьsockfd = socket(AF_INET, SOCK_STREAM, 0)

После того, как я настроил и связал сокет (скажем, сsockfd.sin_port = htons(666)) Я сразу делаю

listen(sockfd, 3);

sleep(50); // for test purposes

Я сплю в течение 50 секунд, чтобы проверить аргумент backlog, который, кажется, игнорируется, потому что я могу установить соединение * более 3 раз на порт 666.

*: Я имею в виду, что я получаю syn / ack для каждого N-го SYN (n> 3), отправленного клиентом и помещенного в очередь прослушивания, вместо того, чтобы быть отброшенным. Что может быть не так? Я прочитал страницы руководства по listen (2) и tcp (7) и обнаружил:

Поведение аргумента backlog на TCP-сокетах изменилось в Linux 2.2. Теперь он указывает длину очереди для полностью установленных сокетов, ожидающих принятия, вместо количества незавершенных запросов на подключение. Максимальная длина очереди для незавершенных сокетов может быть установлена ​​с помощью / proc / sys / net / ipv4 / tcp_max_syn_backlog. Когда синхронизированные файлы включены, логическая максимальная длина отсутствует, и этот параметр игнорируется. См. Tcp (7) для получения дополнительной информации.

, но даже сsysctl -w sys.net.ipv4.tcp_max_syn_backlog=2 а такжеsysctl -w net.ipv4.tcp_syncookies=0Я все еще получаю те же результаты! Должно быть, я что-то упустил или совершенно не понялlisten()Отставание цель.

Ответы на вопрос(2)

Ваш ответ на вопрос