Тайм-аут соединения с Java - PullRequest
       3

Тайм-аут соединения с Java

3 голосов
/ 22 сентября 2011

Я хочу контролировать время ожидания соединения, установив свойство com.sun.jndi.ldap.connect.timeout. Он хорошо работает для значений менее 1000 мс, но если я установлю значения больше 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.");
}

Что может вызвать это?

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Это сообщение на эту тему.Кажется, это свойство не работает таким образом.Может быть эта последующая тема может помочь.

2 голосов
/ 22 сентября 2011

Если целевой хост отвечает на запрос соединения с кодом ошибки, соединение завершается неудачно, как только код ошибки получен. Похоже, что целевой хост подключен, а целевая служба LDAP не прослушивала порт 10389. Таким образом, целевой хост ответил на входящий запрос на подключение с помощью RST, поэтому на клиенте было немедленно выдано исключение. Это ожидаемое поведение. Вы наверняка не хотите задержка получения ошибки? Тайм-аут соединения для случая, когда целевой хост временно недоступен или целевая служба действительно занята.

...