如何找到linux的socket缓冲区大小

时间:2011-10-23 08:05:42

标签: linux sockets buffer

linux的默认套接字缓冲区大小是多少?有没有命令可以看到它?

4 个答案:

答案 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)。

相关问题