一:linux下查看系统socket读写缓冲区大小配置:

http://blog.csdn.net/herecles/article/details/8146017

1. tcp 收发缓冲区默认值

[root@ www.linuxidc.com]# cat /proc/sys/net/ipv4/tcp_rmem

4096    87380   4161536

87380  :tcp接收缓冲区的默认值

[root@ www.linuxidc.com]# cat /proc/sys/net/ipv4/tcp_wmem

4096    16384   4161536

16384  : tcp 发送缓冲区的默认值

2. tcp 或udp收发缓冲区最大值

[root@ www.linuxidc.com]# cat /proc/sys/net/core/rmem_max

131071

131071:tcp 或 udp 接收缓冲区最大可设置值的一半。

也就是说调用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen);  时rcv_size 如果超过 131071,那么

getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 去到的值就等于 131071 * 2 = 262142

[root@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_max

131071

131071:tcp 或 udp 发送缓冲区最大可设置值得一半。

跟上面同一个道理

3. udp收发缓冲区默认值

[root@ www.linuxidc.com]# cat /proc/sys/net/core/rmem_default

111616:udp接收缓冲区的默认值

[root@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_default

111616

111616:udp发送缓冲区的默认值

4. tcp 或udp收发缓冲区最小值

tcp 或udp接收缓冲区的最小值为 256 bytes,由内核的宏决定;

tcp 或udp发送缓冲区的最小值为 2048 bytes,由内核的宏决定

二:socket编程设置读写缓冲区大小:

http://blog.csdn.net/maopig/article/details/6982457

系统提供的socket缓冲区大小为8K,你可以将之设置为64K,尤其在传输实时视频时。

socket发送数据时候先把数据发送到socket缓冲区中,之后接受函数再从缓冲区中取数据,如果发送端特别快的时候,缓冲区很快就被填满(socket默认的是1024×8=8192字节),这时候我们应该根据情况设置缓冲区的大小,可以通过setsockopt函数实现

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 
#include <errno.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <assert.h> 
 
int main(int argc,char **argv) 

    int err = -1;        /* 返回值 */ 
    int s = -1;            /* socket描述符 */ 
    int snd_size = 0;   /* 发送缓冲区大小 */ 
    int rcv_size = 0;    /* 接收缓冲区大小 */ 
    socklen_t optlen;    /* 选项值长度 */ 
 
    /* 
     * 建立一个TCP套接字 
     */ 
    s = socket(PF_INET,SOCK_STREAM,0); 
    if( s == -1){ 
        printf("建立套接字错误\n"); 
        return -1;     
    } 
     
    /* 
     * 先读取缓冲区设置的情况 
     * 获得原始发送缓冲区大小 
     */ 
    optlen = sizeof(snd_size); 
    err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen); 
    if(err<0){ 
        printf("获取发送缓冲区大小错误\n"); 
    }   
    /* 
     * 打印原始缓冲区设置情况 
     */ 
 
    /* 
     * 获得原始接收缓冲区大小 
     */ 
    optlen = sizeof(rcv_size); 
    err = getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 
    if(err<0){ 
        printf("获取接收缓冲区大小错误\n"); 
    } 
     
   printf(" 发送缓冲区原始大小为: %d 字节\n",snd_size); 
   printf(" 接收缓冲区原始大小为: %d 字节\n",rcv_size); 
 
    /* 
     * 设置发送缓冲区大小 
     */ 
    snd_size = 10*1024;    /* 发送缓冲区大小为8K */ 
    optlen = sizeof(snd_size); 
    err = setsockopt(s, SOL_SOCKET, SO_SNDBUF, &snd_size, optlen); 
    if(err<0){ 
        printf("设置发送缓冲区大小错误\n"); 
    } 
 
    /* 
     * 设置接收缓冲区大小 
     */ 
    rcv_size = 10*1024;    /* 接收缓冲区大小为8K */ 
    optlen = sizeof(rcv_size); 
    err = setsockopt(s,SOL_SOCKET,SO_RCVBUF, (char *)&rcv_size, optlen); 
    if(err<0){ 
        printf("设置接收缓冲区大小错误\n"); 
    } 
 
    /* 
     * 检查上述缓冲区设置的情况 
     * 获得修改后发送缓冲区大小 
     */ 
    optlen = sizeof(snd_size); 
    err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen); 
    if(err<0){ 
        printf("获取发送缓冲区大小错误\n"); 
    }   
 
    /* 
     * 获得修改后接收缓冲区大小 
     */ 
    optlen = sizeof(rcv_size); 
    err = getsockopt(s, SOL_SOCKET, SO_RCVBUF,(char *)&rcv_size, &optlen); 
    if(err<0){ 
        printf("获取接收缓冲区大小错误\n"); 
    } 
 
    /* 
     * 打印结果 
     */ 
    printf(" 发送缓冲区大小为: %d 字节\n",snd_size); 
    printf(" 接收缓冲区大小为: %d 字节\n",rcv_size); 
 
    close(s); 
    return 0;

}

运行后的结果:

发送缓冲区原始大小为: 16384 字节

接收缓冲区原始大小为: 87380 字节
 发送缓冲区大小为: 20480 字节
 接收缓冲区大小为: 20480 字节
从结果 看出ubuntu系统默认的发送缓冲区大小:16384字节,接收缓冲区87380字节

但是有个问题我设置的接收和发送缓冲区大小为:10*1024=10240字节,但是实际用getoptsock得到却是20480字节加了一倍。改成其他大小也是都是加倍。

这是由linux内核的算法决定的。

linux下查看系统socket读写缓冲区相关推荐

  1. linux 如何查看属性,linux 下查看系统属性

    linux 下查看系统属性 (2009-06-28 19:01:34) 标签: linux 杂谈 分类: OS linux下查看系统属性 1.查看cpu信息 查看所有cpu信息:cat /proc/c ...

  2. linux 更改make版本,Linux下查看系统版本和make版本

    一.查看Linux内核版本命令(两种方法): 1.cat /proc/versionz [root@localhost ~]# cat /proc/version Linux version 2.6. ...

  3. Linux下查看系统启动时间、安装时间

    Linux下查看系统启动时间.安装时间 一.查看启动时间: 1.uptime命令 [root@iZ8vbf5x2ke0nbfocpm645Z ~]# uptime 17:52:33 up 14 day ...

  4. linux 查看核数与线程数,Linux下查看系统CPU个数、核心数、线程数

    Linux下查看系统CPU个数.核心数.线程数 查看系统CPU个数(物理个数)cat /proc/cpuinfo |grep "physical id"|sort -u 结果如下: ...

  5. Linux下查看系统版本号信息的方法

    From:https://linux.cn/article-9586-1.html 如果你加入了一家新公司,要为开发团队安装所需的软件并重启服务,这个时候首先要弄清楚它们运行在什么发行版以及哪个版本的 ...

  6. linux下查看系统硬件,Linux 查看系统硬件信息 Linux 查看系统硬件信息(实例详解)...

    linux查看系统的硬件信息,并不像windows那么直观,这里我罗列了查看系统信息的实用命令,并作了分类,实例解说.html cpu lscpu命令,查看的是cpu的统计信息.linux blue@ ...

  7. linux下查看系统内存使用情况的几个命令

    最近在客户现场运行的arm linux嵌入式设备出现了死机情况,由于接触linux嵌入式设备时间不长,遇到该问题后觉得束手无措.后领导提示说查看其他没有死机设备的系统资源使用情况,下面介绍下我用到的那 ...

  8. linux下查看系统的信息

    Linux下如何查看版本信息, 包括位数和多核信息,今天我们就来一起看看linux 查看版本信息以及查看CPU内核信息.CPU具体型号等等,整个CPU信息一目了然.相信不会让大家失望. # uname ...

  9. 在Linux下查看系统版本信息命令总结

    每次在想查看系统是多少位的时候.总是记不清究竟用哪个命令.所以做个总结. vonzhou@de16-C6100:~$ lsb_release -a No LSB modules are availab ...

最新文章

  1. android DrawerLayout 改变系统默认的灰色
  2. ubuntu12.0.4不能正常关机和重启的解决方法
  3. 恐怖的shell命令
  4. 怎么学JavaScript?
  5. 计网 - 网络 I/O 模型:BIO、NIO 和 AIO 有什么区别?
  6. 机器学习西瓜书各章详细目录定位
  7. 统计git仓库一些commit数据
  8. 武汉锅检所检测机器人_宿迁水上行走管道检测机器人CCTV-武汉天仪仪器
  9. 稳定服务器头像,WordPress 修复 Gravatar 头像稳定服务器地址
  10. Manjaro.常用命令/ Mnajaro安装后的配置
  11. Bundling and Minification
  12. dumpe2fs命令详解
  13. python局域网控制电脑关机_黑客操作:用python远程开机and关机
  14. NYOJ--60谁获得了最高奖学金
  15. mtkwin10驱动_联发科MTK刷机驱动(支持WIN10)驱动
  16. edius裁剪快捷键_edius常用的快捷键有哪些-怎么设置快捷键-edius快捷键使用大全...
  17. Harvester云计算超融合基础架构HCI软件
  18. java深度模仿支付宝订单号/交易流水号(高性能,不重复)
  19. Kubernetes Egress 网络策略指南
  20. Windows 下rsync同步数据报错7456

热门文章

  1. 下 面 这 条 语 句 一 共 创 建 了 多 少 个 对 象 : String s=a+b+c+d;
  2. Iptables入门教程
  3. 解析css之position
  4. 测试集准确率不变_这个医疗AI准确率突破天际,招来了铺天盖地的质疑
  5. java仿qq空间音乐播放_完美实现仿QQ空间评论回复特效
  6. Linux多线程贝叶斯建树教程,建树经验.doc
  7. Linux入门笔记——文件操作命令2
  8. 160 - 54 eKH
  9. C++多线程快速入门(四)shared_mutex以及读写锁应用
  10. 超图软件试用许可操作步骤_软件中的操作步骤