我正在使用 Node 的内置数据报 UDP 套接字进行简单的 UDP“发送”:
http://nodejs.org/docs/v0.3.1/api/dgram.html http://nodejs.org/docs/v0.3.1/api/dgram.html
消息的目的地是一个域名,在传输之前必须由 DNS 解析。node.js 处理这个问题。
如果 DNS 解析失败,dgram 会抛出“ENOTFOUND Domain Not Found”错误并将其传递给我注册的回调。
我的代码是这样的:
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
来自套接字的事件。如果不这样做,那么节点会将其转换为异常。不要尝试用以下方法来处理这个问题uncaughtException
,因为唯一安全的做法是uncaughtException
是日志然后退出。
这是一个监听的例子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
并且程序将继续运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)