我想通过设置com.sun.jndi.ldap.connect.timeout属性来控制连接超时.它适用于1000 ms以下的值,但是如果我将值设置为大于1000,则超时不会增加(保持为1000).
这是我尝试对其进行测试的代码(服务器已关闭):
long start = System.currentTimeMillis();
try
{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:10389");
env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
env.put(Context.SECURITY_CREDENTIALS, "secret");
env.put("com.sun.jndi.ldap.connect.timeout", "10000");
InitialLdapContext context = new InitialLdapContext(env, null);
} catch (NamingException e)
{
System.out.println("Failed because " + e.getRootCause()
.getMessage() + ". Timeout: " + ((System.currentTimeMillis() - start)) + " ms.");
}
是什么原因造成的?
解决方法:
如果目标主机以错误代码响应连接请求,则一旦收到错误代码,连接就会失败.看来目标主机已启动,并且目标LDAP服务未在端口10389上侦听.因此,目标主机使用RST响应传入的连接请求,因此立即在客户端引发异常.这是预期的行为.您确定不想延迟接收错误吗?连接超时适用于目标主机暂时无法访问或目标服务非常繁忙的情况.