开发者

cURL - "hanging" socket connection on Linux

开发者 https://www.devze.com 2022-12-20 17:10 出处:网络
I have a program to send POST request to a server. I\'m using cURL to send request. My program run on Windows and Linux (on the moment Ub开发者_JS百科untu 9.10).

I have a program to send POST request to a server.

I'm using cURL to send request.

My program run on Windows and Linux (on the moment Ub开发者_JS百科untu 9.10).

When server receive request it processing it and return error code (0000 if no errors) and error description (if any).

Server's web server is Microsoft IIS.

When I run my program at Windows it work well.

But when I run the program at Linux it hangs up for 30 seconds (cURL's timeout) and return error "Operation timed out after 30000 milliseconds with 5 bytes received".

As I know problem in server side - server doesn't send response's size and doesn't close socket connection.

cURL logs (from 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

On Windows logs are almost the same, but without timeout - it close socket immediately after reciving "0000 ".

I can analyse received data and close connection if I get "0000 ", but it's a "dirty hack".

Any ideas?


Your question doesn't reveal how you use libcurl, thus this isn't easy to answer accurately without a lot of guessing. I would also assume some of those missing details would reveal why the app works differently on Linux and Windows.

Your request sends a content-length of 244 but the output you show doesn't include any request-body, why? To me it looks like the server is legitimately waiting for that data to arrive but you don't provide it.

So, you send a weird request. The server replies with a weird response. Garbage in, garbage out I guess.


I found the reason of the issue.
The reason is - VirtualBox.
I'm using VirtualBox to run Ubuntu. If I'm run my program from real (not virtual) PC it work fine (even on Ubuntu). Looks like there is a bug in latest version of VirtualBox.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号