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