zoukankan      html  css  js  c++  java
  • 设置socket IP_TOS选项 (转载)

    转自:http://zhangjunxin520.blog.163.com/blog/static/305037032011721102857609/

    在IP头中,有一Type-of-Service字段,该字段描述了IP包的

    优先级和QoS选项,使用IP_TOS可以来设定该字段的值:
     
    使用setsockopt设置IP_TOS代码如下:
    unsigned char  service_type = 0xe0 | IPTOS_LOWDELAY | IPTOS_RELIABILITY;
    if(setsockopt(sock, SOL_IP/*IPPROTO_IP*/, IP_TOS, (void *)&service_type, sizeof(service_type)) < 0)
            perror("setsockopt(IP_TOS) failed:");
     
    使用getsockopt读取IP_TOS代码如下:
    int optval = 0;
    int optlen = sizeof(optval);
    if(getsockopt(sock, SOL_IP, IP_TOS, (void *)&optval, &optlen) < 0)
            perror("getsockopt(IP_TOS) failed:");
    else
            printf("OPTVAL=%x. ", optval)
     
    在socket设置IP_TOS后,用wireshark抓取该socket上发送的数据,查看IP头部可以看到设置的值。
     
    附man手册中IP_TOS、SO_PRIORITY说明:
    IP_TOS:  SOL_IP / IPPROTO_IP(BSD);  IP_TOS Set  or  receive  the  Type-Of-Service (TOS)  field 
                    that is sent with every IP packet originating from this socket.  It is used to prioritize packets 
                    on the network.  TOS is a byte. There are some standard TOS flags defined: 
                    IPTOS_LOWDELAY to minimize delays for interactive traffic, IPTOS_THROUGHPUT to 
                    optimize throughput, IPTOS_RELIABILITY to optimize for reliability, IPTOS_MINCOST 
                    should be used for "filler data"  where  slow transmission doesn't matter.  At most one of these 
                    TOS values can be specified.  Other bits are invalid and shall be cleared.  Linux sends 
                    IPTOS_LOWDELAY datagrams first by default, but the exact behaviour depends on the 
                    configured queueing discipline.  Some high priority levels may require superuser 
                    privileges (the CAP_NET_ADMIN capability).  The priority can also be set in a protocol 
                    independent way by the (SOL_SOCKET,  SO_PRIORITY) socket option (see socket(7)).
     
    SO_PRIORITY:  SOL_SOCKET;  SO_PRIORITY Set the protocol-defined priority for all packets to be
                    sent on this socket.  Linux uses this value to order the networking queues: packets with a 
                    higher priority may be processed  first  depending on  the  selected device queueing 
                    discipline. For ip(7), this also sets the IP type-of-service (TOS) field for outgoing packets.  
                    Setting a priority  outside the range 0 to 6 requires the CAP_NET_ADMIN capability.
  • 相关阅读:
    二次型(求梯度) —— 公式的简化
    Opencv中K均值算法(K-Means)及其在图像分割中的应用
    统计学相关概念及机器学习中样本相似性度量之马氏距离
    Opencv中SVM样本训练、归类流程及实现
    1+2+3+...+100 不允许使用乘法和除法,条件分支循环等
    1+2+3+...+100 不允许使用乘法和除法,条件分支循环等
    crtmpserver实现防盗流和流推送验证
    快速幂或者矩阵快速幂
    如何调整 php 应用的上传附件大小?
    三个和数组有关的程序题目(C++)
  • 原文地址:https://www.cnblogs.com/lance-ehf/p/4453001.html
Copyright © 2011-2022 走看看