0

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

服务器端 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

4

1 回答 1

0

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

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

于 2013-01-02T18:40:20.790 回答