读取tcp/udp默认缓冲区大小

本文介绍如何通过代码获取TCP和UDP套接字的发送与接收缓冲区大小,并通过查看系统文件来了解默认缓冲区设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、通过代码读取,这个比较准确

 /* getsndrcv.c:
  * getsockopt sample c code
  * using getsockopt
  * Get SO_SNDBUF & SO_RCVBUF Options:
  */
  #include <stdio.h>
  #include <unistd.h>
  #include <stdlib.h>
  #include <errno.h>
  #include <string.h>
  #include <sys/types.h>
  #include <sys/socket.h>
  #include <assert.h>

 /*
  * This function reports the error and
  * exits back to the shell:
  */
  static void
  displayError(const char *on_what) {
	  if ( errno != 0 ) {
		  fputs(strerror(errno),stderr);
		  fputs(": ",stderr);
	  }
	  fputs(on_what,stderr);
	  fputc('\n',stderr);
	  exit(1);
  }

  int main(int argc,char **argv) {
	  int z;
	  int s = -1;       /* Socket */
	  int sndbuf=0;     /* Send buffer size */
	  int rcvbuf=0;     /* Receive buffer size */
	  socklen_t optlen; /* Option length */

     /*
	  * Create a TDP/IP socket to use:
	  */
	  s = socket(PF_INET,SOCK_STREAM,0);
	  /*s = socket(PF_INET,SOCK_DGRAM,0);  udp使用本行代码*/
	  if ( s == -1 ) {
		displayError("socket(2)");
	  }

	 /*
	  * Get socket option SO_SNDBUF:
	  */
	  optlen = sizeof sndbuf;
	  z = getsockopt(s,
	                 SOL_SOCKET,
					 SO_SNDBUF,
	                 &sndbuf,&optlen);
	  if ( z ) {
		displayError("getsockopt(s,SOL_SOCKET,"
      	             "SO_SNDBUF)");
	  }

	  assert(optlen == sizeof sndbuf);

	 /*
	  * Get socket option SO_SNDBUF:
	  */
	  optlen = sizeof rcvbuf;
	  z = getsockopt(s,
	                 SOL_SOCKET,
					 SO_RCVBUF,
	                 &rcvbuf,&optlen);
	  if ( z ) {
		displayError("getsockopt(s,SOL_SOCKET,"
		             "SO_RCVBUF)");
	  }

	  assert(optlen == sizeof rcvbuf);

	 /*
	  * Report the buffer sizes:
	  */
	  printf( "Socket s : %d\n",s);
	  printf( "Send buf: %d bytes\n", sndbuf);
	  printf( "Recv buf: %d bytes\n", rcvbuf);

	  close(s);
	  return 0;
  }

 /*
  * OUTPUT
  *
  [sgupta@rhel54x64 socket]$ gcc getsndrcv.c -o getsndrcv
  [sgupta@rhel54x64 socket]$ ./getsndrcv
  Socket s : 3
  Send buf: 16384 bytes
  Recv buf: 87380 bytes
  [sgupta@rhel54x64 socket]$
  */

2、tcp查看

# cat /proc/sys/net/ipv4/tcp_wmem
4096    16384   131072  //第一个表示最小值,第二个表示默认值,第三个表示最大值。
/proc/sys/net/ipv4/tcp_rmem
# cat /proc/sys/net/ipv4/tcp_rmem
4096    87380   174760

发送缓冲区默认是16k,接受缓冲区默认是8k

udp查看

# cat /proc/sys/net/core/rmem_default
212992
# cat /proc/sys/net/core/wmem_default
212992

如上,udp发送和接受默认缓冲区均为208k.

参考

https://blog.youkuaiyun.com/c359719435/article/details/8815499
https://blog.youkuaiyun.com/test1280/article/details/79776938

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘色的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值