我一直堅持調試我的自定義下載程序整個上午現在我終於知道它出錯了,但我不知道爲什麼。奇怪的連接超時使用winsock
讓我解釋一下:我使用基本的winsock函數編寫HTTP下載程序,而不使用任何花哨的類或框架。我不介意它阻止,因爲它是在一個單獨的線程已經運行所以實際上我只使用MSDN上的示例代碼:
http://msdn.microsoft.com/en-us/library/ms737591(v=VS.85).aspx
發送請求:
GET /index.html HTTP/1.0\r\n
Host: www.example.com\r\n
User-Agent: MyCustomDownloader/1.0\r\n
\r\n
\r\n
而且在接收循環我做一些分配,解析標題行,打開文件句柄等。所以它不能一次接收所有內容,需要一些時間。但我想這不應該是個問題吧?我收到4096字節的塊。
一切都很好,但有時的recv返回-1返回0。而當我打電話WSAGetLastError()返回10060指示前:
WSAETIMEDOUT
Connection timed out.
A connection attempt failed because the connected party did not properly
respond after a period of time, or the established connection failed
because the connected host has failed to respond.
首先,我認爲這是東道主,但我觀察行爲與任何主機...
這是正常的HTTP連接,他們只是不時退出?難道我做錯了什麼?
您可能想要將修改發佈到示例代碼。 –
在** recv **中阻塞的連接套接字不應該返回WSAETIMEDOUT,如果沒有數據,它只會永遠等待(除非您自己配置一些奇特的超時)。所以我敢說你做錯了什麼,但是我們需要看一些代碼。 – rodrigo
感謝您的回覆,很高興聽到recv不應該返回WSAETIMEDOUT。我沒有設置任何襪子選項,所以超時是默認設置(很長)。是的,我應該發佈一些代碼,但現在它全部散佈在我自己的課堂上。我認爲我應該在本週的某個時候逐一分解我的代碼,但我討厭這樣做。 –