與此問題相關:How to set the timeout for socket when looking for host?,我發現瞭解主機查找的默認超時值很重要主機查找的默認超時值是多少?
如果超時時間很短,幾分鐘,我認爲對此無所事事是安全的。如果它很長,例如幾個小時,我必須爲它設置超時。
查找主機時,socket的默認超時值是多少?
與此問題相關:How to set the timeout for socket when looking for host?,我發現瞭解主機查找的默認超時值很重要主機查找的默認超時值是多少?
如果超時時間很短,幾分鐘,我認爲對此無所事事是安全的。如果它很長,例如幾個小時,我必須爲它設置超時。
查找主機時,socket的默認超時值是多少?
這個怎麼樣?
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));
}
}
的JNDI Docs提供以下信息:
的DNS提供商使用以下指數退避算法提交UDP查詢。提供程序向DNS服務器提交查詢,並等待響應在超時期限內(默認爲1秒)到達。如果在超時期限內沒有收到任何迴應,它將查詢下一臺服務器,依此類推。如果提供程序未收到任何服務器的響應,則會延長超時時間,並重復向每個服務器提交查詢的過程,最多重試次數(默認爲4次)。
因此,它取決於配置中包含的DNS服務器的數量,但默認初始值爲1秒,如果所有服務器都失敗,則每個服務器的值爲31秒; 1 + 2 + 4 + 8 + 16 = 31.(初始嘗試+4次重試)