我现在整个早上一直在调试我的自定义下载器,我终于知道它出了什么问题,但我不知道为什么。
让我解释一下:我正在使用基本的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在返回0之前返回-1。当我调用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连接是否正常?我做错了吗?
答案 0 :(得分:0)
我打赌你不会从recv获得10060。您是从connect函数获取它,问题可能在于指定主机地址。