簡體   English   中英

如果並行調用,Mono Dns操作將掛起

[英]Mono Dns operations hang if called in parallel

我在Mono上的Dns類遇到了一個高度可重現的問題,從C#調用:如果我從多台計算機(例如,在群集上)進行多次調用,或多或少並發(例如啟動批處理程序時) ,某些隨機數的電話會掛起。

Mono Dns類很可能沒有正確地超時並重新發出請求:DNS使用基於UDP的RPC協議,並且由於UDP不可靠,如果十個數據包同時全部命中某個DNS服務器,或者類似的情況,一個丟失,將不會收到任何答復。

這是我的問題:有誰知道一種干凈的方法來中斷Mono上C#對Dns.GetHostName或Dns.GetHostInfo的調用,以便在發生這種情況時,可以強制重新發出請求?

現在,我想我應該回答我自己的問題。 因此,問題在於,確實,Mono的庫中存在一些與DNS對話的錯誤,該錯誤自2005年左右開始記錄,但尚未修復。 DNS庫的第二個版本有人認為可以更好地工作。

出於我自己的目的,事實證明我可以從代碼中消除幾乎所有DNS調用。 畢竟,由DNS中丟失數據包觸發的DNS代碼掛起是一件很可怕的事情。

我認為這是一個很好的示例代碼,將UDP通信視為可靠,並且因為它在重負載下非常可靠,所以存在一個纏綿的bug,根本無法修復。 但是,只需將Mono DNS置於繁重的負載下,即可輕松觸發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM