curl_multi_remove_handle的线程安全

时间:2019-05-15 07:24:10

标签: libcurl

似乎有些消息来源建议使用curl_multi_remove_handle来使卷曲手柄“无效”并导致curl_multi_wait早日返回。线程安全保证(如果从另一个线程完成)似乎不包含在此范围内,还是我做错了(线程安全保证基本上只是可​​重入保证)?

推荐的方式信号curl_multi_wait早返回是什么 ?是否真的需要通过超时进行操作? (在Linux下,我将在epoll集中使用一个eventfd来有效地“在这些套接字上等待,或者在该事件上等待fd或给定的超时”。)似乎我可以使用自定义curl_waitfd结构,但这需要针对虚拟插座的平台特定设置。

1 个答案:

答案 0 :(得分:1)

如果该句柄的curl_multi_remove_handle正在线程A中运行,您绝对不能从线程B调用curl_multi_wait。这只会引起眼泪和痛苦。

您可以选择例如:

  • 用户curl_multi_wait()的超时时间足够短,因此您无需中止它
  • 添加专用套接字/文件描述符,以在需要时发送数据以中止
  • 从进度回调(或其他回调)返回您需要停止的传输的错误-通过设置一个标记来检查所有传输(全局或全局类似)
  • 重新设计您的应用程序逻辑,这样您就可以考虑转移到“死机”而不会停止,并让libcurl有其原因并在以后将其关闭,而您不必太在意之后进行的操作您决定可以忽略它。