c++ - 使用 winsock 的奇怪连接超时

标签 c++ winapi timeout winsock

我整个上午都在调试我的自定义下载器,我终于知道哪里出了问题,但我不知道为什么。

让我解释一下:我正在编写一个 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 在返回 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 连接来说是正常的,它们只是不时地断开连接吗?我做错了什么吗?

最佳答案

我打赌你不会从 recv 中得到 10060。您是从连接函数获取它的,问题可能出在指定主机地址上。

关于c++ - 使用 winsock 的奇怪连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7242715/

相关文章:

c# - C++ 与 Java/C# 比较

c++ - 如何使用 win32 编写通用警报消息?

linux - 使用 postgresql 在 ubuntu 上努力设置连接空闲超时

c++ - Clang AST 访问者,避免遍历包含文件

c++ - 多重继承使私有(private)成员可访问

php - 如何使用 PHP 从可执行文件中提取图标?

c - 在没有 VirtualBox 的情况下使用 VirtualBox SDK

mysql - 使用linq to sql获取数据时超时过期异常

python - 推文中最长的短语 - Python 超时

c++ - 添加自定义 TensorFlow OP