我的开发组织对线程和select()有自己的包装器实现。应用程序需要被增强,从而进行HTTPS请求,我已经决定要使用的libcurl。经过研究后,我发现curl_easy_perform是一个阻塞调用,因此我决定对非阻塞调用使用curl_multi_perform方法以允许线程中的其他工作。
HTTPS请求将需要定期对相同的URL执行。我知道我可以保持相同的curl_easy手柄并给予到curl_multi手柄。我将执行curl_multi_perform以获得结果,但是稍后需要使用curl_multi_perform重新发送请求,例如在5分钟内。 因此,这将是使用相同简单句柄的连续请求。但是,我不确定收到我的第一个请求的结果后,curl_easy接口如何告知多接口何时重新发送请求。我该如何完成?
(也许从多句柄中删除了easy句柄,然后在再次需要一个请求时将其重新添加到多句柄中?)
我认为无论使用哪种技术,传出请求都将使用相同的传出端口。
答案 0 :(得分:1)
(也许从多句柄中删除了easy句柄,然后在再次需要一个请求时将其重新添加到多句柄中?)
正确。来自libcurl documentation:
单次传输完成后,仍将易手柄添加到多堆栈中。您需要首先使用curl_multi_remove_handle删除easy句柄,然后使用curl_easy_cleanup将其关闭,或者可能为其设置新选项,然后使用curl_multi_add_handle再次添加它以开始另一个传输。
。
我认为无论使用什么技术,传出请求都将使用相同的传出端口
不能保证。 libcurl将尝试重用与easy句柄关联的现有连接,但是如果先前的连接已终止,则将建立具有不可预测的本地端口的新连接。