如何不使用curl_easy_perform()上的现有连接,挂在Internet连接上

How not to re-use existing connection on curl_easy_perform(), hangs on internet connection change

本文关键字:连接 Internet 挂在 何不使 curl easy perform      更新时间:2023-10-16

用详细的说法,我注意到输出:

在第一次运行结束时:

* Connection #0 to host www.example.com left intact

第二次运行开始时:

* Found bundle for host www.example.com: 0x24e3360 [can pipeline]
* Re-using existing connection! (#0) with host www.example.com

我想要一种方法不是重新使用现有连接,或在使用现有连接之前验证。

其他详细信息:

我正在使用libcurl" Easy"界面执行一些简单的网页下载。我有一个课程,可以在其构造函数中设置一些选项。在执行方法中,我添加了URL选项,然后进行curl_easy_perform(...)。

尝试使用我的班级进行操作,我注意到:

  • 如果第一次操作是离线的,那么下一个操作就像离线一样(即使在线时)
  • 如果第一次操作在线,然后在下一个操作中关闭了Internet连接,则curl_easy_perform(...)悬挂而永不返回。

我希望基于当前的Internet连接更合适的行为和操作。(我尝试在表演方法中清理和重新定位 选项设置,但这似乎有些浪费。)

我去了:

curl_easy_setopt(myEasy_handle, CURLOPT_FORBID_REUSE, 1);

我在班级的构造函数中添加了一次设置。这可能会减慢操作的速度,但是它似乎比清理和重新定位更快,并且使用与某些服务器进行Internet连接检查的另一个单独的连接。

我使用了它,因为它似乎比我程序的其他选项更合适。我查看的两个有用的链接如下:link1,link2。

编辑:

我还添加了选项 CURLOPT_TIMEOUT,以设置一个硬性限制,以便在easy_perform中停止多长时间,互联网连接下降。