2013-07-31 36 views

回答

4

WinInet可以爲將來的請求緩存和重用連接到相同的服務器。

+0

好吧,我需要連接的下一個請求之前關閉,因爲創建一個新的路由表條目,並請求應通過不同的接口,但因爲連接不關閉請求經過老接口和忽略路由表條目。 – Chris

+0

作爲臨時解決方法,每個請求都在一個進程中進行管理,並且何時完成,我終止強制連接關閉的進程。 – Chris

+3

致電時'InternetOpenUrl中,()',忽略'INTERNET_FLAG_EXISTING_CONNECT'標誌,以便它不使用一個緩存的連接,並忽略'INTERNET_FLAG_KEEP_CONNECTION'標誌,以便它不緩存的連接。另一個選擇是使用'HttpAddRequestHeaders()'手動爲請求添加一個「Connection:close」頭,這樣它就會強制服務器在每次響應後關閉連接。 –

3

WinInet的嘗試,當你釋放它可以選擇保留插座活躍,準備到InternetOpen下次調用句柄重新使用插座的地方就可以了,所以連。大多數時候這是一件好事,你不需要擔心。

如果你真的需要它立即關閉,你可以通過你的最後InternetCloseHandle後調用InternetSetOption愚弄的WinInet成這樣:

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

這樣做可以告訴WinInet的全球WinInet的設置已更改(例如,在註冊表中),所以它別無選擇,只能關閉所有套接字並重置自身。但是,這顯然不是預期的用法,並且如果您與WinInet進行大量連接,將會產生一些性能影響。