设置socket IP_TOS选项

在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.\n", 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.
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值