如果并行调用Mono Dns操作,则挂起

本文关键字:挂起 操作 Dns 并行 调用 Mono 如果 | 更新日期: 2023-09-27 18:17:40

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

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

我的问题是:有人知道一种干净的方法来中断对Dns的呼叫吗?GetHostName或Dns。GetHostInfo,从c#上Mono,所以当这种情况发生时,我可以强制请求重新发布?

如果并行调用Mono Dns操作,则挂起

现在我想我应该回答我自己的问题了。所以交易是,确实有一些bug在Mono的库与DNS通信,自2005年左右记录,但尚未修复。有第二个版本的DNS库,有些人认为它工作得更好。

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

我认为这是一个很好的例子,代码对待UDP通信,如果它是可靠的,因为它是相当可靠的,除了在繁重的负载下,有一个挥之不去的错误,根本没有得到修复。但是很容易通过简单地将Mono DNS置于高负载下触发