什么是主机查找的默认超时?

时间:2014-01-13 09:48:07

标签: java sockets dns timeout

与此问题相关:How to set the timeout for socket when looking for host?,我发现了解主机查找的默认超时非常重要

如果超时很短,例如几分钟,我认为用它做任何事都是安全的。如果它很长,例如几个小时,我必须为它设置超时。

查找主机时套接字的默认超时是什么?

2 个答案:

答案 0 :(得分:2)

JNDI Docs提供此信息:

  

DNS提供程序使用以下指数退避算法提交UDP查询。提供程序向DNS服务器提交查询,并等待响应在超时期限内到达(默认为1秒)。如果在超时期限内没有收到响应,它将查询下一个服务器,依此类推。如果提供程序没有收到任何服务器的响应,它会使超时时间加倍,并重复向每个服务器提交查询的过程,最多重试次数(默认为4次)。

因此,它取决于您的配置包含的DNS服务器的数量,但如果所有服务器都失败,则默认初始值为1秒,每台服务器为31秒; 1 + 2 + 4 + 8 + 16 = 31.(初始尝试+4次重试)

答案 1 :(得分:-2)

这个怎么样?

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 
 */
public class SocketTimeoutTest {

public static void main(String[] args) {
    long startMillis = System.currentTimeMillis();

    try {
        Socket socket = new Socket("www.test123.com", 80);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    long endMillis = System.currentTimeMillis();

    System.out.println("Timout: " + (endMillis - startMillis));

    }

}