Во FreeBSD команда netstat -Lan показывает размеры очередей на слушающих портах. До версии 4.1-STABLE эта команда выводит примерно следующее:
Current listen queue sizes (qlen/incqlen/maxqlen) Listen Local Address 40/38/3000 *.80 0/0/5 *.22
В этом примере максимальный размер очереди на 80-ом порту — 3000 соединений. Это размер задаётся параметром backlog в вызове listen(2) и не может быть больше, чем задано в sysctl kern.ipc.somaxconn. На самом деле, максимальный размер всегда больше указанного в полтора раза, то есть, в данном случае это 4500 соединений. В очереди присутствует 40 соединений, из которых только два готовы для accept(2), а остальные 38 находятся в состоянии установления соединения (например, получен SYN от клиента).
Во FreeBSD 4.1-STABLE появились accept-фильтры и это отразилось на выводе netstat -Lan. Если слушающий порт использует accept-фильтр, то установленное соединение, не прошедшее фильтр, остаётся в очереди как неготовое. Если к предыдущим 40 соединениям в нашем примере добавить 50 соединений, не прошедших фильтр, то netstat -Lan покажет следующее:
Current listen queue sizes (qlen/incqlen/maxqlen) Listen Local Address 90/89/3000 *.80 0/0/5 *.22
Обратите внимание, что из двух готовых соединения из первого примера фильтр прошло только одно. Вы спросите, где же находятся 50 не прошедших фильтр соединений в первом примере ? Ответ — они уже приняты сервером, часть из них может быть уже даже давно закрыта. Дело в том, что в современных accept-фильтрах (dataready и httpready) не предусмотрены никакие таймауты и соединение может находиться в очереди несколько часов, пока не будет удалено по истечении keepalive-таймаута в TCP (если он включён).
Во FreeBSD 4.4-STABLE появились syncache и syncookie, и в очереди остались только установленные соединения. Если accept-фильтр не используется, то наш пример выглядит так:
Current listen queue sizes (qlen/incqlen/maxqlen) Listen Local Address 2/0/3000 *.80 0/0/5 *.22
а с использованием accept-фильтра — вот так: Current listen queue sizes (qlen/incqlen/maxqlen) Listen Local Address 1/51/3000 *.80 0/0/5 *.22
Таким образом, в современных версиях FreeBSD qlen показывает число соединений, готовых для accept(), а incqlen — число принятых, но не прошедших фильтр, соединений.