Jonathan
Jonathan

Reputation: 1367

Setting Java DNS cache TTL

I'm attempting to change the DNS cache timeout in Java 1.6. I see discussion here of using something like the following:

java.security.Security.setProperty ("networkaddress.cache.ttl" , TTL_SECS);

But I've tried this simple test in Win 7....

System.out.println("DEFAULT DNS TTL: "+sun.net.InetAddressCachePolicy.get());
java.security.Security.setProperty ("networkaddress.cache.ttl" , "123");    
System.out.println("DEFAULT DNS TTL: "+sun.net.InetAddressCachePolicy.get());

... and the output doesn't change. It seems this can be changed in the Java installation's security properties but I preffer to keep this in the code for neatness. Any ideas how to achieve that?

Thanks.

Upvotes: 6

Views: 11409

Answers (3)

lingyfh
lingyfh

Reputation: 1383

In Android 4.0 (Ice Cream Sandwich) and earlier, DNS caching was performed both by InetAddress and by the C library, which meant that DNS TTLs could not be honored correctly. In later releases, caching is done solely by the C library and DNS TTLs are honored.

Google desc

Upvotes: 0

Ravi Nori
Ravi Nori

Reputation: 149

Try this and see the output you get. The property needs to be set when the class is loaded.

static {
    java.security.Security.setProperty ("networkaddress.cache.ttl" , "12");    
}
public static void main(String[] args) {
    System.out.println("DEFAULT DNS TTL: "+sun.net.InetAddressCachePolicy.get());
    java.security.Security.setProperty ("networkaddress.cache.ttl" , "123");    
    System.out.println("DEFAULT DNS TTL: "+sun.net.InetAddressCachePolicy.get());
}

Upvotes: 14

user207421
user207421

Reputation: 310998

These are not system properties: they are set in the java.security file. For the corresponding system properties, which are non-preferred, see 'Sun implementation-specific properties' in Networking Properties.

Upvotes: 3

Related Questions