【问题标题】:is there some option in curl to set the tcp reset timeout?curl中有一些选项来设置tcp重置超时吗?
【发布时间】:2012-12-28 08:11:36
【问题描述】:

我有一个使用http传输文件的客户端和服务器, 我使用 tcpdump 发现,每次收到 http 标头后, 服务器发送一个确认, 但随后服务器收到2个reset数据包,有时在成功接收到包含http内容的数据包后会收到reset。

服务器端 tcpdump 数据的时间线如下所示:

01:10:01.553222------data:http header
01:10:01.553233----------ack

01:10:01.590075-----------reset
01:10:01.590103-----------reset

curl选项设置代码:

    curl_easy_setopt(curl_obj, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl_obj, CURLOPT_WRITEFUNCTION, WriteData); 
curl_easy_setopt(curl_obj, CURLOPT_WRITEDATA, &sbuf);  
curl_easy_setopt(curl_obj, CURLOPT_COOKIEFILE, "cookie");

curl_easy_setopt(curl_obj, CURLOPT_POST, 1L);
curl_easy_setopt(curl_obj, CURLOPT_READFUNCTION, ReadCallback);
curl_easy_setopt(curl_obj, CURLOPT_READDATA, this);
curl_easy_setopt(curl_obj, CURLOPT_POSTFIELDSIZE, block_size);


curl_easy_setopt(curl_obj, CURLOPT_NOPROGRESS, 0);
curl_easy_setopt(curl_obj, CURLOPT_PROGRESSFUNCTION, ProgressCallback);
curl_easy_setopt(curl_obj, CURLOPT_PROGRESSDATA, this)

那么,我想问的是,当在有限的时间内没有收到发送数据的确认时,libcurl 中是否有一些选项可以设置重置 tcp 的超时时间?如果客户端和服务器在同一个城市,并且有快速的互联网连接,这个系统可以正常工作,所以业务代码中应该没有一些错误。

ps: curl 返回errorno 56

【问题讨论】:

  • 这里的假设太多。您假设重置是由于超时而发出的。它们可以出于其他原因发行。您在应用程序级别遇到了什么导致您获得此 tcpdump 的行为?

标签: http curl tcp libcurl


【解决方案1】:

有多个回调选项允许应用程序直接访问套接字,例如CURLOPT_SOCKOPTFUNCTIONCURLOPT_OPENSOCKETFUNCTION

但就像这个问题的评论者一样,我怀疑这是您问题的实际原因(或解决方案)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-19
    • 2015-06-18
    • 2013-08-31
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2023-03-29
    • 2020-10-03
    相关资源
    最近更新 更多