LINUX.ORG.RU
ФорумAdmin

Recv-Q / Send-Q


0

1

Кто может на пальцах пояснить что означают столбецы Recv-Q / Send-Q в выводе «ss -l». Я правильно понимаю, что Send-Q это фиксированный размер очереди заданный параметром backlog в listen сокета? Я правильно понимаю, что это кол-во соединений ждущих accept? А что в этом случае recv-q, для чего он показан и вообще где можно подробно почитать об всем этом?


Если смотреть исходники ss, то как я понял, при нормальной работе (получение данных от ядра через netlink-сокет, а не через /proc/net/tcp), в столбцы Recv-Q / Send-Q выводятся значения idiag_rqueue и idiag_wqueue структуры ядра inet_diag_msg. Они формируются в файле /usr/src/linux/net/ipv4/tcp_diag.c:

        if (sk->sk_state == TCP_LISTEN) {
                r->idiag_rqueue = sk->sk_ack_backlog;
                r->idiag_wqueue = sk->sk_max_ack_backlog;
        } else {
                r->idiag_rqueue = max_t(int, tp->rcv_nxt - tp->copied_seq, 0);
                r->idiag_wqueue = tp->write_seq - tp->snd_una;
        }

То есть для слушающего сокета это sk_ack_backlog и sk_max_ack_backlog. Насколько я понимаю, первое это количество tcp-соединений, которые приняты ядром, но ещё не accept()-нуты приложеним, а второе — это максимальное количество таких соединений, по достижению которого ядро не будет ставить их в очередь, а будет просто сбрасывать.

mky ★★★★★
()
Ответ на: комментарий от mky

Pirks

это очередь именно для сокета или очередь глобальная tcp стека? В sysctl какой параметр за нее отвечает, somaxconn или backlog?

Pirks
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.