Reputation: 1367
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
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.
Upvotes: 0
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
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