【发布时间】:2013-01-30 12:03:41
【问题描述】:
下面的程序执行 DNS 查找。除了主机名和 dns 的一种特定组合外,它运行良好:
import javax.naming.directory.InitialDirContext;
import javax.naming.NamingException;
import java.util.Hashtable;
public final class StackOverflow {
public static void main(String args[]) throws NamingException {
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
env.put("java.naming.provider.url", "dns://ns.dnssek.org");
System.out.println(new InitialDirContext(env).getAttributes("dnsseccert.us", new String[]{"NS","A"}));
}
}
我尝试设置超时:
env.put("com.sun.jndi.dns.timeout.initial", "220");
但是它的行为很奇怪。它有时在抛出时适用于小值:
DNS error [Root exception is java.net.SocketTimeoutException: Receive timed out];
但在大多数情况下,程序只是冻结并挂在内存中。
有其他人遇到过同样的问题并解决了吗?是否有任何其他设置我可以尝试阻止它?是否有其他替代方法 java.naming.factory.initial 我可以尝试?
【问题讨论】: