zoukankan      html  css  js  c++  java
  • 关于Linux中TCP和UDP协议的发送和接收缓冲区

    1. tcp 收发缓冲区默认值
    [root@qljt core]# cat /proc/sys/net/ipv4/tcp_rmem
    4096 87380 4161536(TCP接收缓冲区)

    cat /proc/sys/net/ipv4/tcp_wmem
    4096 16384 4161536(TCP发送缓冲区)

    2. tcp 或udp收发缓冲区最大值
    [root@qljt core]# cat /proc/sys/net/core/rmem_max 接收

    [root@qljt core]# cat /proc/sys/net/core/wmem_max 发送

    3. udp收发缓冲区默认值

    [root@qljt core]# cat /proc/sys/net/core/rmem_default
    111616:udp接收缓冲区的默认值

    [root@qljt core]# cat /proc/sys/net/core/wmem_default
    111616:udp发送缓冲区的默认值

    可以通过setsockopt()和getsockopt()函数设置和获取相应缓冲区的大小;

    譬如:
    int iSock = -1;
    iSock = socket(AF_INET, SOCK_DGRAM, 0);
    int iRecvLen = 300*1024;
    int iRecvLen_2 = 0;
    int iOptlen = 4;
    int iRet = -1, iRet_2 = -1;
    iRet = setsockopt(iSock, SOL_SOCKET, SO_RCVBUF, &iRecvLen, 4);
    iRet_2 = getsockopt(iSock, SOL_SOCKET, SO_RCVBUF, &iRecvLen_2, &iOptlen);
    printf("RecvLen 2 is %d[%d:%d].\n", iRecvLen_2, iRet, iRet_2);

    因为我使用的Linux版本为:Fedora release 9 (Sulphur),其默认的udp缓冲区的最大值为 110592 Bytes,因此,当通过setsockopt()函数想将其设置为300KB时,超过了最大上限的2倍,因此用getsockopt()函数获取实际设置的缓冲区长度为221184Bytes(110592*2)。

  • 相关阅读:
    Day 20 初识面向对象
    Day 16 常用模块
    Day 15 正则表达式 re模块
    D14 模块 导入模块 开发目录规范
    Day 13 迭代器,生成器,内置函数
    Day 12 递归,二分算法,推导式,匿名函数
    Day 11 闭包函数.装饰器
    D10 函数(二) 嵌套,命名空间作用域
    D09 函数(一) 返回值,参数
    Day 07 Day08 字符编码与文件处理
  • 原文地址:https://www.cnblogs.com/cnpirate/p/2608458.html
Copyright © 2011-2022 走看看