c++ - 将 HTTP 连接绑定(bind)到特定适配器(提示 : Metered Connection)

标签 c++ c windows winapi winhttp

Windows 8 及更高版本已设置为按流量计费 Wi-Fi(和其他)连接(并附加费用,但此处无关紧要)。我用过 Native Wi-Fi APIWCM APIs查找所需信息。

使用套接字,可以绑定(bind)、选择性地发送和忽略来自/到计量连接的传入数据包。但是,如何使用 WinHTTP APIs 做到这一点? ?

关于 StackOverflow 和 SuperUser 的一些答案建议使用 ForceBindIP,但我们不能简单地使用它。

如果 MS Windows 已经实现了按流量计费的连接,理想情况下应该有一些方法来指示 WinHTTP 服务不要使用特定的连接。

最佳答案

不幸的是,WinInet 和 WinHTTP 本身都不支持您的要求。

您可能不得不求助于使用 WinSock API bind() 函数来手动将 WinInet/WinHTTP session 套接字绑定(bind)到所需的网络连接。

在 Windows 7 之前,您可以通过使用 InternetQueryOption()INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO 从 HINTERNET 句柄获取 SOCKET 句柄 选项。它使用有关连接的信息填充 INTERNET_DIAGNOSTIC_SOCKET_INFO 结构,包括实际的 SOCKET 句柄。

但是,Windows 7 及更高版本不再支持此选项。虽然可以通过一些额外的工作手动跟踪 SOCKET 句柄,但我认为这对您没有任何好处。在尝试连接到服务器之前,套接字需要使用 bind() 进行绑定(bind)。 WinInet/WinHTTP 提供的可用于搜索 SOCKET 句柄的相关信息在连接尝试进行之前不可用。就在连接之前,该信息还不在 TCP 路由表中。而且一连上,就来不及重新绑定(bind)socket了。

所以我认为你在这方面运气不佳,除非/直到微软公开一个新的 API 来支持绑定(bind) WinInet/WinHTTP session ,或者以其他方式再次公开对 SOCKET 句柄的访问。

关于c++ - 将 HTTP 连接绑定(bind)到特定适配器(提示 : Metered Connection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38993073/

相关文章:

c++ - 如何让 IOStream 表现更好?

c++ - 在 Mac OS X 上使用 CUDA 5.5 时出现内核失败错误

c - 使用 const 变量初始化数组

php - Windows 10 无法将 AWS SDK for PHP v3 与 Composer 一起使用

windows - 使用 WIX 工具集创建不会在注册表中留下任何痕迹的 Windows Installer msi

windows - 域帐户每隔几分钟就会用正确的密码锁定一次

python - 使用 C++,如何在 Qt Designer 中运行 python 文件?

c - 图像相互交叉的 OpenGL 纹理加载问题

C编程: functions with arrays

c++ - C 和 C++ 编程语言的最终链接是什么?