首先,我在谷歌上搜索了很多,这是我的最后手段。
我使用Windows7的Linphone SIP开源,并尝试发送ToS不同于0的音频/视频流。
代码的相关部分:
retval = setsockopt(session->rtp.socket, proto, value_type, (SOCKET_OPTION_VALUE)&tos, sizeof(tos));
if (retval==-1)
ortp_error("Fail to set DSCP value on rtp socket: %s",getSocketError());
if (session->rtcp.socket != (ortp_socket_t)-1){
if (setsockopt(session->rtcp.socket, proto, value_type, (SOCKET_OPTION_VALUE)&tos, sizeof(tos))==-1){
ortp_error("Fail to set DSCP value on rtcp socket: %s",getSocketError());
}
}
我成功了,也就是说retval
不是-1
。然而,从wireshark我仍然看到Tos=0。
有人告诉它的windows bug,有人-通过SPEC(a.e.feature)。
有人知道解决方法吗?或者我需要通过命令行通过"gpedit.msc"手动创建组策略吗?
如果您想了解微软"最新、最棒"的QOS故事,您需要了解qWave。qWave的问题在于API只占了一半。qWave允许您为windows本身"标记"tcp流类型(视频、语音等),然后网络管理员可以创建有关如何处理它的策略。此外,qWave默认情况下不会安装在服务器操作系统上。qWave不能在网络数据包中设置特定的DSCP位,这些位由数字生活网络联盟(DLNA)和WiFi联盟无线多媒体(WMM)规范定义。
如果您需要设置特定的DSCP位,那么您唯一的选择就是使用较旧且不推荐使用的流量控制API。