WinAPI:InternetCloseHandle函数关闭句柄但不关闭连接

时间:2013-07-31 14:17:18

标签: windows winapi network-programming msdn

我调用wininet\InternetOpenUrlA,然后调用wininet \ InternetReadFile,当我完成后,我调用wininet\InternetCloseHandle,返回True。这意味着句柄成功关闭,但连接仍处于已建立状态。

当我调用wininet \ InternetCloseHandle时,为什么连接不关闭?

2 个答案:

答案 0 :(得分:4)

WinInet可以缓存和重用连接以用于将来对同一服务器的请求。

答案 1 :(得分:3)

WinInet试图在可能的地方重用套接字,因此即使你释放句柄,它也可以选择保持套接字处于活动状态,为下一次调用InternetOpen做好准备。大多数时候这是一件好事,你不必担心它。

如果您真的需要立即关闭它,您可以通过在最终的InternetCloseHandle之后调用InternetSetOption来欺骗WinInet:

...
InternetCloseHandle(hInternet);
InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);

执行此操作告诉WinInet全局WinInet设置已更改(例如在注册表中),因此它别无选择,只能关闭所有套接字并重置自身。但是,这显然不是预期的用途,如果您与WinInet建立了大量连接,将会对性能产生影响。