[英]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.