我调用wininet\InternetOpenUrlA,然后调用wininet \ InternetReadFile,当我完成后,我调用wininet\InternetCloseHandle,返回True。这意味着句柄成功关闭,但连接仍处于已建立状态。
当我调用wininet \ InternetCloseHandle时,为什么连接不关闭?
答案 0 :(得分:4)
WinInet可以缓存和重用连接以用于将来对同一服务器的请求。
答案 1 :(得分:3)
WinInet试图在可能的地方重用套接字,因此即使你释放句柄,它也可以选择保持套接字处于活动状态,为下一次调用InternetOpen做好准备。大多数时候这是一件好事,你不必担心它。
如果您真的需要立即关闭它,您可以通过在最终的InternetCloseHandle之后调用InternetSetOption来欺骗WinInet:
...
InternetCloseHandle(hInternet);
InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
执行此操作告诉WinInet全局WinInet设置已更改(例如在注册表中),因此它别无选择,只能关闭所有套接字并重置自身。但是,这显然不是预期的用途,如果您与WinInet建立了大量连接,将会对性能产生影响。