簡體   English   中英

Node.js UDP(dgram)處理來自DNS解析的錯誤

[英]Node.js UDP (dgram) handling error from DNS resolution

我正在使用Node的內置數據報UDP套接字進行簡單的UDP“發送”:

http://nodejs.org/docs/v0.3.1/api/dgram.html

消息的目標是在傳輸之前必須由DNS解析的域名.node.js處理此問題。

如果DNS解析失敗,dgram會拋出“未找到ENOTFOUND域”錯誤並將其傳遞給我已注冊的回調。

我的代碼是這樣的:

client = dgram.createSocket("udp4");
client.send(message, 
            0, 
                message.length, 
                this.port, 
                this.address, 
                function(err, bytes) { 
                    if (err) { 
                        //get rid of error??
                        } 
                    }
                );
client.close();

我對錯誤並不特別感興趣..如果它失敗了,它失敗了,它對應用程序的業務規則並不重要。 我會將它記錄到控制台以獲得完整性。但是我無法阻止這個異常走回堆棧並關閉應用程序。 我該如何處理這個錯誤?

我不希望為此放置一個全局的未處理的異常處理程序。 我試過在Try / Except處理程序中重新拋出回調內的錯誤..但是沒有用。

有什么想法嗎?

謝謝閱讀。

您需要從套接字偵聽error事件。 如果不這樣做,那么node會將其轉換為異常。 不要嘗試使用uncaughtException來處理這個問題,因為從uncaughtException唯一安全的做法是log然后退出。

以下是偵聽error並導致故意DNS錯誤的示例:

var dgram = require('dgram');
var message = new Buffer("Some bytes");
var client = dgram.createSocket("udp4");
client.on("error", function (err) {
    console.log("Socket error: " + err);
});
client.send(message, 0, message.length, 41234, "1.2.3.4.5");

這應該打印:

Socket error: Error: ENOTFOUND, Domain name not found

該計划將繼續運行。

暫無
暫無

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

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