【问题标题】:Does Java Socket cache DNS?Java Socket 是否缓存 DNS?
【发布时间】:2016-02-17 09:38:05
【问题描述】:

Socket 的 ctor 具有将服务器作为字符串或 InetAddress 的版本。是否缓存了 DNS 查找的结果,以便另一个构造的 Socket 将跳过执行查找并使用缓存的值(如果可用)?如果是这样,这是否适用于两个版本,还是只适用于采用 InetAddress 的版本?

【问题讨论】:

  • 是的。 DNS 查找由解析器缓存。
  • @ElliottFrisch Java 文档只讨论了 InetAddress 下的缓存,说该类有一个缓存(我假设这意味着它在该类的所有对象之间共享)。但是,当使用接受字符串而不是 InetAddress 的 Socket ctor 时呢?可以假设有一个内部 InetAddress 也共享该缓存吗?
  • @DisplayName 该构造函数使用InetAddress 来解析名称。这是同一个缓存。
  • 这是因为 DNS 名称解析是由 gethostbyname2() 完成的(这是本机代码,它与系统上每个程序的解析过程相同 - 所以它是系统级缓存)。
  • @ElliottFrisch 我不关注。这是一个 GNU 扩展,它不维护缓存。 Java 就是这样做的。

标签: java sockets networking dns nio


【解决方案1】:

Java Socket 是否缓存 DNS?

不,但InetAddress 确实如此,或者在其内部,Socket 使用InetAddress 来解析名称,所以实际上是。

Java Networking Propertiesnetworkaddress.cache.ttl 和朋友们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-04
    • 2010-12-22
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多