LDAP APIS confused me, anyone can tell my what’s wrong with my code?

 

I have call ldap_set_option() and set the LDAP_OPT_NETWORK_TIMEOUT or the LDAP_OPT_TIMEOUT opt,

before  call the ldap_bind_s() or  the non synchronize APIS, but the authentication result still return after almost 70

seconds later, am I miss something (note: my server is windows active directory, simple authentication.)?

 

 

            struct timeval tv_select_timeout;

            tv_select_timeout.tv_sec = 10;

            tv_select_timeout.tv_usec = 0;

            int t;

            t=ldap_set_option(pLdapConnection, LDAP_OPT_NETWORK_TIMEOUT, &tv_select_timeout);

 

#ifdef BIND_TIME_CONTROL

            {

                        int msgid, err;

                        LDAPMessage *result = NULL;

                        char *error_msg;

                        struct timeval tv;

 

                        if ((msgid = ldap_simple_bind(pLdapConnection, pUserDN, pPassword)) == -1)

                        {

 

                                    error_msg = NULL;

                                    ldap_get_option(pLdapConnection, LDAP_OPT_ERROR_STRING, &error_msg);

                                    if (error_msg != NULL)

                                    {

                                               

                                                ldap_memfree(error_msg);

                                    }

 

                                    ldap_unbind_s(pLdapConnection);

                                    return AUTH_AGENT_ERR_LDAPSIMPLEBIND_FAIL;

                        }

 

                        ret = ldap_result(pLdapConnection, msgid, LDAP_MSG_ALL, & tv_select_timeout, &result);

 

                        if (ret == -1)

                        {

                                    ldap_unbind_s(pLdapConnection);

                                    if (result != NULL)

                                                ldap_msgfree(result);

                                    return AUTH_AGENT_ERR_LDAPRESULT_FAIL;

                        }

                        else if (ret == 0)

                        {

                                    /*timeout & result ==NULL */

                                                ldap_unbind_s(pLdapConnection);

                                    if (result != NULL)

                                                ldap_msgfree(result);

 

                                    return AUTH_AGENT_ERR_LDAPRESULT_TIMEOUT;

                        }

 

                        ret = ldap_result2error(pLdapConnection, result, 1);

            }

#else

            {

 

                        ret = ldap_bind_s(pLdapConnection, pUserDN, pPassword, LDAP_AUTH_SIMPLE);

 

            }

#endif