【发布时间】:2014-10-02 17:55:21
【问题描述】:
当应用程序启动时,我正在使用 Wininet 对我的服务器进行检查。
问题是在调用 CloseInternetHandle 之后,套接字状态仍然是 CLOSE_WAIT,如 netstat 所示,最糟糕的是它永远不会改变它的状态。
这是我正在使用的简单代码。我做错了什么?
hInternet = InternetOpen(NULL, INTERNETOPENTYPEPRECONFIG, NULL, NULL, 0);
if (hInternet)
{
hFile = InternetOpenUrl(hInternet, url, NULL, 0, INTERNETFLAGRELOAD, 0);
InternetReadFile(hFile, &buffer, 20, &btsRead);
InternetCloseHandle(hFile);
InternetCloseHandle(hInternet);
}
【问题讨论】:
-
你要等多久才能宣布它“永不”改变?
-
应用程序是否正在运行或调试器是否已暂停? CLOSE_WAIT 表示应用还没有关闭套接字。
-
但是你可以看到我正在关闭它,它没有在调试器中运行。
-
您没有关闭 TCP 连接。您正在关闭互联网句柄。 WinInet API 肯定支持 HTTP keep-alive 和连接池。暂停调试器会阻止清理。
-
@usr 正如我之前所说,它没有在调试器中运行,如何关闭 TCP 连接?