cURL - Linux上的“挂”套接字连接

时间:2010-02-22 01:26:56

标签: c++ linux curl sockets libcurl

我有一个程序将POST请求发送到服务器 我正在使用cURL发送请求 我的程序在Windows和Linux上运行(目前是Ubuntu 9.10)。

当服务器收到请求时,它会处理它并返回错误代码(0000,如果没有错误)和错误描述(如果有的话)。
服务器的Web服务器是Microsoft IIS。

当我在Windows上运行我的程序时,它运行良好 但是当我在Linux上运行该程序时,它会挂起30秒(cURL的超时)并返回错误“操作在30000毫秒后收到5个字节时超时”。 我知道服务器端的问题 - 服务器不发送响应的大小,也不关闭套接字连接。

cURL日志(来自Linux):


11:00:09.544    Process()       curl: libcurl/7.19.5 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.15
11:00:09.941    DebugCallback() About to connect() to sms1.redoxygen.net port 80 (#0)
11:00:09.941    DebugCallback() Trying 203.145.62.146...
11:00:10.084    DebugCallback() Connected to sms1.redoxygen.net (203.145.62.146) port 80 (#0)
11:00:10.085    DebugCallback() POST /sms.dll?private&type=26 HTTP/1.1
                                Host: sms1.redoxygen.net
                                Content-Length: 244
11:00:10.086    DebugCallback() [244 bytes of DATA]
11:00:10.087    ReadCallback()  No more data to send
11:00:10.292    WriteCallback() HTTP/1.1 200 OK
11:00:10.293    DebugCallback() Content-Type: text/html
11:00:10.294    DebugCallback() no chunk, no close, no size. Assume close to signal end
11:00:10.294    WriteCallback() 
11:00:10.466    DebugCallback() 0000 
11:00:40.500    DebugCallback() Operation timed out after 30000 milliseconds with 5 bytes received
11:00:40.501    DebugCallback() Closing connection #0

在Windows上,日志几乎相同,但没有超时 - 它在收到“0000”后立即关闭套接字。

如果我收到“0000”,我可以分析收到的数据并关闭连接,但这是一个“肮脏的黑客”。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你的问题没有透露你如何使用libcurl,因此如果不进行大量猜测就不容易准确回答。我还假设其中一些缺失的细节会揭示为什么应用程序在Linux和Windows上的工作方式不同。

您的请求发送的内容长度为244,但您显示的输出不包含任何请求正文,为什么?对我来说,看起来服务器正在等待数据到达,但你没有提供它。

所以,你发送一个奇怪的请求。服务器回复一个奇怪的响应。垃圾进去,垃圾出来我猜。

答案 1 :(得分:0)

我找到了问题的原因 原因是 - VirtualBox。
我正在使用VirtualBox来运行Ubuntu。如果我从真实(非虚拟)PC运行我的程序,它工作正常(即使在Ubuntu上)。 看起来最新版本的VirtualBox中存在一个错误。

相关问题