与这个问题有关:寻找主机时如何设置套接字的超时?,我发现知道主机查找的默认超时很重要
如果超时很短,例如几分钟,我认为什么都不做是安全的。如果它很长,例如几个小时,我必须为它设置超时。
查找主机时套接字的默认超时是多少?
JNDI 文档提供以下信息:
DNS 提供程序使用以下指数退避算法提交 UDP 查询。提供程序向 DNS 服务器提交查询,并等待响应在超时期限(默认为 1 秒)内到达。如果在超时期限内未收到响应,则查询下一台服务器,依此类推。如果提供程序未收到来自任何服务器的响应,则会将超时期限加倍,并重复向每个服务器提交查询的过程,最多不超过最大重试次数(默认为 4
)。
因此,这取决于您的配置包括的DNS服务器的数量,但默认初始值为一秒,如果所有服务器都失败,则每台服务器为31秒; 1 + 2 + 4 + 8 + 16 = 31。(初始尝试 + 4 次重试)
这个呢?
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));
}
}