更新:下面的代码只适用于openldap 2.4+。无论您设置了什么,openLdap 2.3都不会违反LDAP_OPT_TIMEOUT,否则ldap_simple_bind_s将不会超时。这里是来自openLdap论坛的link
我在我的LDAP认证服务中使用ldap_simple_bind_s,并设置了LDAP_OPT_TIMEOUT,LDAP_OPT_TIMELIMIT和LDAP_OPT_NETWORK_TIMEOUT;如果LDAP服务器不可用,它会成功超时。
这里是我的LDAP连接方法的代码摘录:
int opt_timeout = 4; // LDAP_OPT_TIMEOUT
int timelimit = 4; // LDAP_OPT_TIMELIMIT
int network_timeout = 4; // LDAP_OPT_NETWORK_TIMEOUT
int status = 0;
// Set LDAP operation timeout(synchronous operations)
if (opt_timeout > 0)
{
struct timeval optTimeout;
optTimeout.tv_usec = 0;
optTimeout.tv_sec = opt_timeout;
status = ldap_set_option(connection, LDAP_OPT_TIMEOUT, (void *)&optTimeout);
if (status != LDAP_OPT_SUCCESS)
{
return false;
}
}
// Set LDAP operation timeout
if (timelimit > 0)
{
status = ldap_set_option(connection, LDAP_OPT_TIMELIMIT, (void *)&timelimit);
if (status != LDAP_OPT_SUCCESS)
{
return false;
}
}
// Set LDAP network operation timeout(connection attempt)
if (network_timeout > 0)
{
struct timeval networkTimeout;
networkTimeout.tv_usec = 0;
networkTimeout.tv_sec = network_timeout;
status = ldap_set_option(connection, LDAP_OPT_NETWORK_TIMEOUT, (void *)&networkTimeout);
if (status != LDAP_OPT_SUCCESS)
{
return false;
}
}
来源
2013-10-02 14:28:05
Aki
谢谢 - 我不知道为什么使用功能的异步版本并没有出现我但解决了这一问题。 – 2009-12-10 16:00:10