Я все время отлаживаю отладку своего пользовательского загрузчика, и я наконец-то знаю, где он идет не так, но я не знаю, почему.
Позвольте мне объяснить: я кодирую загрузчик HTTP, просто используяосновные функции winsock, не использующие какой-либо причудливый класс или фреймворк.Я не против, если он блокируется, потому что он уже запущен в отдельном потоке, поэтому на самом деле я просто использую пример кода на 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.
FirstЯ думал, что это хост, но я наблюдаю за поведением любого хоста ...
Это нормально для HTTP-соединений, когда они просто время от времени выпадают?Я что-то не так делаю?