Странный тайм-аут соединения с использованием winsock - PullRequest
1 голос
/ 30 августа 2011

Я все время отлаживаю отладку своего пользовательского загрузчика, и я наконец-то знаю, где он идет не так, но я не знаю, почему.

Позвольте мне объяснить: я кодирую загрузчик 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-соединений, когда они просто время от времени выпадают?Я что-то не так делаю?

1 Ответ

0 голосов
/ 08 сентября 2011

Бьюсь об заклад, вы не получите 10060 от recv. Вы получаете его из функции подключения, и проблема может заключаться в указании адреса хоста.

...