Windows 10 ignores setsockopt IP_TOS
Windows 10 ignores setsockopt IP_TOS
简短版本:我正在尝试在我的应用程序发送的流量上设置IP_TOS字段,即使setsockopt成功返回并且getsockopt返回正确的IP_TOS值,流量在离开Windows 10框时是未标记的。
更长的版本:我有一个应用程序,它发送需要设置IP_TOS字段的流量,并且IP_TOS值可以是一系列值中的一个;这是一个环境要求,所以没有办法绕过它。应用程序还需要跨平台(Windows 10和Linux(。考虑到这些要求,我们决定只使用 boost asio,并在创建时在套接字上设置IP_TOS。
Linux 端按照我们想要的方式工作,创建套接字,设置IP_TOS,发送数据,tcpdump 显示数据在发送端和接收端正确标记。
Windows端执行除实际标记流量之外的所有操作。套接字被创建,IP_TOS设置并读回以在发送之前进行验证,但是wireshark/tcpdump显示流量根本没有被标记(IP_TOS为0(。当我们开始看到这个问题时,我们使用普通的Windows TCP套接字创建了一个简单的测试应用程序,使用setsockopt和getsockopt设置和读取IP_TOS,但仍然有同样的问题。
我的google-fu有时可能很弱,但有关Windows 10支持IP_TOS的信息似乎相当稀少。我有一个MSDN文档说两者都不使用它(而是使用QoS API(,但它在Windows 10中受支持,我认为这意味着可以设置它。我还有一个较旧的支持文档,说必须启用支持,但我找不到与 Windows 10 相关的更新文档。我确实尝试了注册表调整,加上第二个(不使用NLA(,但没有帮助。
我现在有点不知所措,所以我希望有人以前处理过这个问题,并且有一个解决方案来设置IP_TOS在插座上。真正尝试避免引入另一个 API 或在应用程序(netsh 或组策略(之外进行调用以实现应该简单的事情。
TOS在OS中默认禁用(不完美(
要启用 TOS,请使用注册表编辑器:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersDisableUserTOSSetting
请参阅:设置服务类型 (TOS( 位
- 我正在开发服务器,ip作为参数传递不起作用
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- C++ boost::asio::ip::tcp::acceptor 有时不接受连接器?
- 从网址获取 IP (C++)
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?
- 如何修复无效的API密钥,IP或操作权限错误?
- C++ Winsock2 客户端未通过远程 IP 连接到服务器
- PHP Profiler语言 - 使用 C++ 从 PHP 扩展获取客户端 IP 和 URL
- 为什么 boost::asio::ip::tcp::basic_stream_socket::available 的运行
- 如何使用 libcurl 在本地 IP 上获取 HTML?
- 在C++中使用宏验证 IP 时出错
- 使用 IP 帮助程序的 Windows 中活动 UDP 连接的远程地址
- 将静态 IP 分配给我的 ESP32 服务器后不再响应
- C++ / Qt:如何检测主机名或IP地址何时引用当前系统?
- "acceptor"在从TCP迁移到UDP时不是"boost::asio::ip::udp
- 用于C++的 TCP/IP 解析器和响应器
- 使用 C++将 IP 地址附加到字符*
- Winsock 数据不是从 IP 检索的,而是从普通 URL 检索的
- 是否有一种标准化的方法通过TCP/IP网络发送JPG图像