c++ - cURL - Linux 上的 "hanging"套接字连接

标签 c++ linux curl sockets libcurl

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

当服务器收到请求时,它会处理它并返回错误代码(如果没有错误则为 0000)和错误描述(如果有)。
服务器的网络服务器是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”,我可以分析接收到的数据并关闭连接,但这是一个“肮脏的黑客”。

有什么想法吗?

最佳答案

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

您的请求发送的内容长度为 244,但您显示的输出不包含任何请求正文,这是为什么?在我看来,服务器似乎在合法地等待数据到达,但您没有提供。

因此,您发送了一个奇怪的请求。服务器回复一个奇怪的响应。我猜是垃圾进,垃圾出。

关于c++ - cURL - Linux 上的 "hanging"套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308282/

相关文章:

php - 呈现时的 cURL Html 输出与原始页面不同

c++ - 从 ‘char*’ 到 ‘char’ 的无效转换

c++ - 如果我改变形状,Pytorch C++ (libtorch) 会输出不同的结果

C++ GCC/MinGW 路径 : ssp, ext, tr1;并行、分机、位、实验

c++ - 在 C++ 中链接 cURL

php - Shopify - 添加新产品时出现 API 错误(词法 JSON 错误)

c++ - set 和 vector 哪个效率更高

linux - 如何从 Dev 分支提取最新文件而不是 master 文件?

32 位 arm android ndk 独立工具链中缺少 linux/uinput.h?

linux - Debian 7、fstab、mount.cifs 参数无效