Windows 8及更高版本的设置是要对Wi-Fi(和其他)连接进行计量(并且附加了成本,但这里无关紧要)。我已使用Native Wi-Fi API和WCM APIs查找所需信息。
使用套接字,可以绑定,选择性地发送和忽略来自/到计量连接的传入数据包。但是,如何使用WinHTTP APIs?
执行此操作StackOverflow和SuperUser的一些答案建议使用ForceBindIP,但我们不能简单地使用它。
如果MS Windows实现了计量连接,理想情况下应该有一些方法来指示WinHTTP服务不使用特定连接。
答案 0 :(得分:1)
不幸的是,WinInet和WinHTTP都不支持您的要求。
您可能不得不求助于使用WinSock API bind()
函数手动将WinInet / WinHTTP会话套接字绑定到所需的网络连接。
在Windows 7之前,您可以使用带有SOCKET
选项的HINTERNET
从InternetQueryOption()
句柄获取INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO
句柄。它会在INTERNET_DIAGNOSTIC_SOCKET_INFO
结构中填充有关连接的信息,包括实际的SOCKET
句柄。
但是,Windows 7及更高版本不再支持此选项。虽然可以通过一些额外的工作来手动追踪SOCKET
手柄,但我认为这对你没有任何好处。在尝试连接到服务器之前,套接字需要与bind()
绑定。在连接尝试进行之前,WinInet / WinHTTP提供的可用于搜寻SOCKET
句柄的相关信息不可用。在连接之前,信息不在TCP路由表中。一个连接,重新绑定套接字为时已晚。
所以我认为你没有运气,除非/直到微软公开新API以支持绑定WinInet / WinHTTP会话,或以其他方式再次公开对SOCKET
句柄的访问。