linux网卡缓冲区设置,【Linux】tcp缓冲区大小的默认值、最大值

本文详细探讨了Linux系统中TCP缓冲区大小的设置,包括设置疑惑、默认值以及最大值。通过setsockopt函数设置SO_SNDBUF和SO_RCVBUF时,实际值会被翻倍,以适应数据包的开销。默认情况下,接收缓冲区最大值为8M,发送缓冲区最大值为16M,这些值可在/proc/sys/net/core/*_wmem和*_rmem文件中查看和调整。此外,文章还提到了/proc/sys/net/ipv4/tcp_wmem和tcp_rmem文件中针对特定协议的默认值和范围。
摘要由CSDN通过智能技术生成

Author:阿冬哥

Created:2013-4-17

Blog:http://blog.csdn.net/c359719435/

Copyright 2013 阿冬哥 http://blog.csdn.net/c359719435/

使用以及转载请注明出处

1 设置socket tcp缓冲区大小的疑惑

疑惑1:通过setsockopt设置SO_SNDBUF、SO_RCVBUF这连个默认缓冲区的值,再用getsockopt获取设置的值,发现返回值是设置值的两倍。为什么?

通过网上查找,看到linux的内核代码/usr/src/linux-2.6.13.2/net/core/sock.c,找到sock_setsockopt这个函数的这段代码:

case SO_SNDBUF:

/* Don't error on this BSD doesn't and if you think

about it this is right. Otherwise apps have to

play 'guess the biggest size' games. RCVBUF/SNDBUF

are treated in BSD as hints */

if (val > sysctl_wmem_max)//val是我们想设置的缓冲区大小的值

val = sysctl_wmem_max;//大于最大值,则val值设置成最大值

sk->sk_userlocks |= SOCK_SNDBUF_LOCK;

if ((val * ) < SOCK_MIN_SNDBUF)//val的两倍小于最小值,则设置成最小值

sk->sk_sndbuf = SOCK_MIN_SNDBUF;

else

sk->sk_sndbuf = val * ;//val的两倍大于最小值,则设置成val值的两倍

/*

* Wake up sending tasks if we

* upped the value.

*/

sk->sk_write_space(sk);

break;

case SO_RCVBUF:

/* Don't error on this BSD doesn't and if you think

about it this is right. Otherwise apps have to

play 'guess the biggest size' games. RCVBUF/SNDBUF

are treated in BSD as hints */

if (val > sysctl_rmem_max)

val = sysctl_rmem_max;

sk->sk_userlocks |= SOCK_RCVBUF_LOCK;

/* FIXME: is this lower bound the right one? */<

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值