【问题标题】:Mono Dns operations hang if called in parallel如果并行调用,Mono Dns 操作会挂起
【发布时间】:2013-06-07 21:08:35
【问题描述】:

我在 Mono 上的 Dns 类(从 C# 调用)遇到了一个高度可重现的问题:如果我从多台机器(例如,在集群上)进行多次调用,或多或少同时调用(例如批处理程序时)启动),一些随机数量的呼叫挂起。

Mono Dns 类似乎很可能没有正确超时并重新发出请求:DNS 使用基于 UDP 的 RPC 协议,并且由于 UDP 不可靠,如果十个数据包同时到达 DNS 服务器或一物一物丢失,不会有任何回复。

这是我的问题:有谁知道在 Mono 上从 C# 中断对 Dns.GetHostName 或 Dns.GetHostInfo 的调用的干净方法,以便在发生这种情况时,我可以强制重新发出请求?

【问题讨论】:

    标签: c# dns mono


    【解决方案1】:

    现在我想我应该回答我自己的问题了。因此,事实上,Mono 的库中存在某种与 DNS 通信的错误,自 2005 年左右开始记录,但尚未修复。有人声称 DNS 库的第二个版本效果更好。

    出于我自己的目的,事实证明我可以从我的代码中消除几乎所有的 DNS 调用。毕竟,由 DNS 中丢失的数据包触发的 DNS 代码挂起是一件非常可怕的事情。

    我认为这是将 UDP 通信视为可靠的代码的一个很好的示例,并且因为它非常可靠,除非在重负载下,它有一个挥之不去的错误,根本无法修复。但是很容易通过简单地将 Mono DNS 置于重负载下触发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2013-08-18
      相关资源
      最近更新 更多