How to set a timeout for a socket when searching for a host?

In my unit test, I use commons httpclient to request an invalid remote website, and the maximum timeout:

@Test(timeout = 10000) public void should_not_be_accessible_if_configuration_is_incorrect() throws Exception { // use httpclient to visit an invalid remote http web site } 

But this can cause this exception on some computers:

 java.lang.Exception: test timed out after 10000 milliseconds at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:894) at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1286) at java.net.InetAddress.getAllByName0(InetAddress.java:1239) at java.net.InetAddress.getAllByName(InetAddress.java:1155) at java.net.InetAddress.getAllByName(InetAddress.java:1091) at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:44) at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:102) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:357) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:218) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57) 

It seems to block the method: java.net.Inet4AddressImpl.lookupAllHostAddr()

I wonder if there is a way to set the maximum latency for it?

+3
java timeout sockets
Jan 13 '14 at 6:02
source share
1 answer

You can control Java DNS timeouts through the timeout properties described here :

 com.example.jndi.dns.timeout.initial com.example.jndi.dns.timeout.retries 
+4
Jan 13 '14 at 6:18
source share



All Articles