更新:下面的代碼只適用於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