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

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.csdn.net/c359719435/article/details/8815499
https://blog.csdn.net/test1280/article/details/79776938

猜你喜欢

转载自blog.csdn.net/stallion5632/article/details/127266637
今日推荐