listen () игнорирует аргумент невыполненной работы?

У меня следующая проблема:

У меня sockfd = socket (AF_INET, SOCK_STREAM, 0)

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

listen(sockfd, 3);

sleep(50); // for test purposes

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

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

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

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

26
задан sth 24 February 2011 в 22:20
поделиться