libCURL 7.21.7服务器关闭TCP连接后,CURLOPT_POST上的libCURL 7.21.7长超时(win32)

libCURL 7.21.7服务器关闭TCP连接后,CURLOPT_POST上的libCURL 7.21.7长超时(win32),c,sockets,winapi,curl,tcp,C,Sockets,Winapi,Curl,Tcp,我使用的是libcURL 7.21.7,我知道它有点过时,但在我必须升级之前,我不会升级旧项目。 我最近遇到一个问题,即libcURL在尝试建立新连接之前,在curl\u easy\u perform中放置了几分钟,以防服务器关闭连接: **14:24**:18.421875 Sending request Re-using existing connection! (#0) with host XXX * Connected to XXX (XXX) port 80 (#0) > PO

我使用的是libcURL 7.21.7,我知道它有点过时,但在我必须升级之前,我不会升级旧项目。 我最近遇到一个问题,即libcURL在尝试建立新连接之前,在curl\u easy\u perform中放置了几分钟,以防服务器关闭连接:

**14:24**:18.421875  Sending request
Re-using existing connection! (#0) with host XXX
* Connected to XXX (XXX) port 80 (#0)
> POST /FOO HTTP/1.1
Host: XXX
Accept: */*
Content-Type: text/xml; charset="utf-8"
Content-Length: 1182
* Recv failure: Connection was reset
* Connection died, retrying a fresh connect
* Closing connection #0
* Issue another request to this URL: 'XXX/FOO'
* About to connect() to XXX port 80 (#0)
*   Trying XXX... * connected
* Connected to XXX (XXX) port 80 (#0)
> POST /FOO HTTP/1.1
Host: XXX
Accept: */*
Content-Type: text/xml; charset="utf-8"
Content-Length: 1182

< HTTP/1.1 200 OK
< Server: nginx/1.5.7
< Date: Fri, 06 Jun 2014 **13:27:02** GMT
< Content-Type: text/plain
< Content-Length: 61
< Connection: keep-alive
<
* Connection #0 to host XXX left intact
所以,在cURL意识到应该启动一个新连接之前,已经有将近3分钟了。nginx默认在1分钟后关闭非活动的TCP连接。我尝试过调整CURLOPT_TIMEOUT_MS和CURLOPT_CONNECTTIMEOUT_MS,但是cURL仍然等待分钟看起来这些选项只能通过*nix上的信号工作,而不能在windows上工作。 我一直在浏览一些在线讨论,并尝试使用CURLINFO_LASTSOCKET,检查libcURL使用的最后一个套接字的状态,看起来没有任何错误。 我最后的办法是使用CURLOPT_bird_重用,但我希望在可能的情况下重用连接。在尝试重用无效连接时,cURL停止等待的时间太长了。 有人可以在这里分享任何提示或解决方案吗


谢谢

您可能会发现这个问题的答案很有用:如果nginx出于任何原因重置服务器端的连接,它就不能引入3分钟的延迟。查看tcpdump或服务器端日志(如果有)可能会很有趣,以了解这些分钟的确切来源。。。