sae*_*edn 103
如果要在终端中查看缓冲区大小,可以查看:
/proc/sys/net/ipv4/tcp_rmem
(供阅读) /proc/sys/net/ipv4/tcp_wmem
(写)它们包含三个数字,分别是最小,默认和最大内存大小值(以字节为单位).
Din*_*.R. 31
为了在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
Run Code Online (Sandbox Code Playgroud)
虽然正如已经指出的那样,可以在 中查看当前默认套接字缓冲区大小/proc
,也可以使用sysctl
(注意:虽然名称包括 ipv4,但这些大小也适用于 ipv6 套接字 - ipv6 tcp_v6_init_sock()代码只是调用了 ipv4 tcp_init_sock() 函数):
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
Run Code Online (Sandbox Code Playgroud)
然而,默认套接字缓冲区只是在 sock 初始化时设置,但内核随后动态调整它们的大小(除非使用 setsockopt() 和 SO_SNDBUF 设置)。可以使用ss
命令(iproute
包的一部分)检查当前打开的套接字缓冲区的实际大小,该命令还可以提供有关套接字的更多信息,如拥塞控制参数等。例如,列出当前打开的 TCP(t
选项)套接字以及相关的内存 ( m
) 信息:
ss -tm
Run Code Online (Sandbox Code Playgroud)
这是一些示例输出:
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)
Run Code Online (Sandbox Code Playgroud)
这是 skmem(套接字内存)的简要说明 - 有关更多信息,您需要查看内核源代码(例如sock.h):
Run Code Online (Sandbox Code Playgroud)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
归档时间: |
|
查看次数: |
131677 次 |
最近记录: |