与此问题相关:How to set the timeout for socket when looking for host?,我发现了解主机查找的默认超时非常重要
如果超时很短,例如几分钟,我认为用它做任何事都是安全的。如果它很长,例如几个小时,我必须为它设置超时。
查找主机时套接字的默认超时是什么?
答案 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));
}
}