libcur libldap 多线程笔记

[libcurl]
1.libcur 多线程调用库需要在主线程进行全局初始化的 curl_global_init(CURL_GLOBAL_ALL);
2.另libcurl的超时机制在多线程环境可能会出错,为保证多线程安全需要调用:curl_easy_setopt(handler, CURLOPT_NOSIGNAL, 1L); 禁用超时设置。
3.多线程环境设置线程间curl_handle共享dns缓存,可提高性能
static pthread_mutex_t mutexShareHandle;
void set_share_handle(CURL* curl_handle)
{
    static CURLSH* share_handle = NULL;
    if (!share_handle)
    {
        if(0 != pthread_mutex_lock(&(mutexShareHandle)))
        {
                return;
        }
        if(!share_handle)
        {
                share_handle = curl_share_init();
                curl_share_setopt(share_handle, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
        }
        pthread_mutex_unlock(&(mutexShareHandle));
    }
    curl_easy_setopt(curl_handle, CURLOPT_SHARE, share_handle);
    curl_easy_setopt(curl_handle, CURLOPT_DNS_CACHE_TIMEOUT, 60);
}
[libldap_r]
 
多线程调用 ldap_set_urllist_proc(ldap_initialize默认调用此函数) 需要ldap库在主线程被全局初始化,
可通过在主线程调用 ldap_get_option, ldap_set_option 达到目的,参考代码
        int  optdata[] = {LDAP_VERSION3};
        ldap_set_option(NULL, LDAP_OPT_PROTOCOL_VERSION, optdata);
 


你可能感兴趣的:(libcur libldap 多线程笔记)