昨天,研究OpenSIPS 2.1,遇到一个问题。
在使用async模式的rest_post时,日志中提示如下错误:
ERROR:rest_client:resume_async_http_req: curl_multi_perform: Please call curl_multi_perform() soon
而同步模式的rest_post是没有问题的。
通过查找相关的关键字,发现 http://curl.haxx.se/mail/lib-2012-06/0350.html
看来,是libcurl版本低于7.20.0可能会有该问题,查了一下,果然,CentOS上的版本是7.19.x 的。错误好像出在rest_methods.c的这个部分:
mrc = curl_multi_perform(multi_handle, &running_handles);
if (mrc != CURLM_OK) {
LM_ERR("curl_multi_perform: %s\n", curl_multi_strerror(mrc));
goto error;
}
也就是说,如果mrc不是CURLM_OK的话,都会出错,那么,7.20.0以下的版本可能还会返回CURLM_CALL_MULTI_PERFORM。根据libcurl文档的说明,如果curl_multi_perform()返回CURLM_CALL_MULTI_PERFORM,应该继续调用curl_multi_perform(),因此,把上述代码修改如下:
again:
mrc = curl_multi_perform(multi_handle, &running_handles);
if (mrc == CURLM_CALL_MULTI_PERFORM) {
goto again;
}
if (mrc != CURLM_OK) {
LM_ERR("curl_multi_perform: %s\n", curl_multi_strerror(mrc));
goto error;
}
问题解决。注意,文件中有两处调用curl_multi_perform()的地方都需要修改。
这是OpenSIPS相关文章的第一次尝试,请多提宝贵意见。
本文分享自 FreeSWITCH中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!