socket API getsockopt(IPPROTO_IP, IP_TOS)这个API只能获得自己发出去包的TOS的设置情况。
大家都知道数据是接收和发送;QOS标志是需要双向单方面设置的;那么如何能获得对方发来的包中IP层TOS字段的值?我知道抓包是可以的,但考虑种种情况,这个不是一个好方法,有其他方法吗?

解决方案 »

  1.   

    感谢回复。
    其实通过努力搜索终于找到另外一个关键字IP_RECVTOS,但目前还没有实验成功。
    抓包会对性能有影响,不到万不得已不采用
      

  2.   

    int tos;
    getsockopt(s, IPPROTO_IP, IP_TOS, (char*)&tos, sizeof(tos)) IP_TOS 设置或者接收源于该套接字的每个IP包的 Type-Of-Service (TOS 服务类型)字段.它被用来在网络上区分包的优先级. TOS 是单字节的字段.定义了一些的标准 TOS 标识: IPTOS_LOWDELAY 用来为交互式通信最小化延迟时间, IPTOS_THROUGHPUT 用来优化吞吐量, IPTOS_RELIABILITY 用来作可靠性优化, IPTOS_MINCOST 应该被用作"填充数据",对于这些数据,低速传输是无关紧要的.至多只能声明这些 TOS 值中的一个.其它的都是无效的,应当被清除.缺省时,Linux首先发送 IPTOS_LOWDELAY 数据报, 但是确切的做法要看配置的排队规则而定. 一些高优先级的层次可能会要求一个有效的用户标识 0 或者 CAP_NET_ADMIN 能力. 优先级也可以以于协议无关的方式通过( SOL_SOCKET, SO_PRIORITY )套接字选项(参看 socket(7) )来设置.不知道行不行了
      

  3.   

    这个是不行的,这个只能获取自己发送出去包的TOS字段谢谢