Как найти размер буфера сокета Linux - PullRequest
53 голосов
/ 23 октября 2011

Какой размер буфера сокета по умолчанию для linux?Есть ли команда, чтобы увидеть это?

Ответы [ 4 ]

99 голосов
/ 23 октября 2011

Если вы хотите увидеть размер вашего буфера в терминале, вы можете взглянуть на:

  • /proc/sys/net/ipv4/tcp_rmem (для чтения)
  • /proc/sys/net/ipv4/tcp_wmem (для записи)

Они содержат три числа, которые являются минимальными, значениями по умолчанию и максимальными значениями объема памяти (в байтах), соответственно.

28 голосов
/ 12 июля 2012

Для получения размера буфера в программе на языке c / c ++ используется следующий поток

int n;
unsigned int m = sizeof(n);
int fdsocket;
fdsocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // example
getsockopt(fdsocket,SOL_SOCKET,SO_RCVBUF,(void *)&n, &m);
// now the variable n will have the socket size
0 голосов
/ 23 мая 2019

Хотя, как уже указывалось, в / proc можно увидеть текущие размеры буфера сокетов по умолчанию, но также можно проверить их с помощью sysctl (Примечание. Хотя имя включает ipv4, эти размеры также применяются ксокеты ipv6 - код ipv6 tcp_v6_init_sock () просто вызывает функцию ipv4 tcp_init_sock ()):

 sysctl net.ipv4.tcp_rmem
 sysctl net.ipv4.tcp_wmem

Однако буферы сокетов по умолчанию просто устанавливаются при инициализации sock, но затем ядро ​​динамически их масштабирует (если не установлено с помощью setsockopt () с SO_SNDBUF).Фактический размер буферов для текущих открытых сокетов может быть проверен с помощью команды ss (часть пакета iproute), которая также может предоставить кучу дополнительной информации о сокетах, таких как параметр управления перегрузкой и т. Д. Например, для просмотра текущего спискаоткрыть сокеты TCP (t опция) и информацию о связанной памяти (m):

ss -tm

Вот несколько примеров вывода:

State       Recv-Q Send-Q        Local Address:Port        Peer Address:Port
ESTAB       0      0             192.168.56.102:ssh        192.168.56.1:56328
     skmem:(r0,rb369280,t0,tb87040,f0,w0,o0,bl0,d0)

Вот краткое объяснение skmem (сокета)память) - для получения дополнительной информации вам нужно взглянуть на исходные коды ядра (например, sock.h ):

r:sk_rmem_alloc
rb:sk_rcvbuf          - current receive buffer size
t:sk_wmem_alloc
tb:sk_sndbuf          - current transmit buffer size
f:sk_forward_alloc
w:sk_wmem_queued      - persistent transmit queue size
o:sk_omem_alloc
bl:sk_backlog
d:sk_drops
0 голосов
/ 13 марта 2015

Атомный размер - 4096 байт, максимальный размер - 65536 байт. Sendfile использует 16 каналов размером 4096 байт. cmd: ioctl (fd, FIONREAD, & buff_size).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...