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)。

  • 相关阅读:
    【快速选择算法与nth_element函数】【续UVA11300 】
    【贪心+中位数】【UVa 11300】 分金币
    【贪心】【Uva11729】 Commando War
    np.random.randn()、np.random.rand()、np.random.randint()
    numpy.unpackbits()
    tf.get_variable()
    tf.truncated_normal()
    tf.FIFOQueue()
    np.hsplit()
    np.frombuffer()
  • 原文地址:https://www.cnblogs.com/cnpirate/p/2608458.html
Copyright © 2011-2022 走看看