linux的默认套接字缓冲区大小是多少?有没有命令可以看到它?
答案 0 :(得分:98)
如果要在终端中查看缓冲区大小,可以查看:
/proc/sys/net/ipv4/tcp_rmem
(供读取)/proc/sys/net/ipv4/tcp_wmem
(写作)它们包含三个数字,分别是最小值,默认值和最大内存大小值(以字节为单位)。
答案 1 :(得分:28)
为了在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
答案 2 :(得分:0)
虽然已经指出,可以在/ proc中查看当前的默认套接字缓冲区大小,但是也可以使用package com.myapplicaton.beans;
public class ThingTypes {
@Autowired
MybatisMapper mybatisMapper;
//...
}
进行检查(注意:尽管名称包括ipv4,但这些大小也适用于ipv6套接字-ipv6 tcp_v6_init_sock()代码仅调用ipv4 tcp_init_sock()函数):
WAR
但是,仅在初始化sock时设置默认套接字缓冲区,但是内核随后会动态调整它们的大小(除非使用带有SO_SNDBUF的setsockopt()进行设置)。可以使用sysctl
命令( sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
包的一部分)检查当前打开的套接字的缓冲区的实际大小,该命令还可以提供有关套接字的更多信息,例如拥塞控制参数等。要列出当前打开的TCP(ss
选项)套接字和关联的内存(iproute
)信息:
t
以下是一些示例输出:
m
以下是skmem(套接字内存)的简要说明-有关更多信息,您需要查看内核源代码(例如sock.h):
ss -tm
答案 3 :(得分:-5)
原子大小为4096字节,最大大小为65536字节。 Sendfile使用16个管道,每个管道大小为4096字节。 cmd:ioctl(fd,FIONREAD,& buff_size)。