Node.js Raspberry PI mdns getaddrinfo 3008错误

Node.js Raspberry PI mdns getaddrinfo 3008错误,node.js,raspberry-pi,raspbian,mdns,raspberry-pi2,Node.js,Raspberry Pi,Raspbian,Mdns,Raspberry Pi2,我有一个示例Node.js脚本: var mdns = require('mdns'); var browser = mdns.createBrowser(mdns.tcp('http')); browser.on('error', function (error) { console.log("error"); console.log(error); }); browser.on('serviceUp', function (service) { console.lo

我有一个示例Node.js脚本:

var mdns = require('mdns');

var browser = mdns.createBrowser(mdns.tcp('http'));
browser.on('error', function (error) {
    console.log("error");
    console.log(error);
});
browser.on('serviceUp', function (service) {
    console.log("serviceUp");
    console.log(service);
});
browser.start();
在我的Mac电脑上,它工作正常,有两个服务。如果我在运行Raspbean(连接到同一网络)的Raspberry PI 2上运行完全相同的脚本,我会得到以下输出:

pi@raspberrypi ~ $ node mdns.js 
*** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node>
*** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node&f=DNSServiceRegister>
error
{ [Error: getaddrinfo -3008] code: -3008, errno: -3008, syscall: 'getaddrinfo' }
error
{ [Error: getaddrinfo -3008] code: -3008, errno: -3008, syscall: 'getaddrinfo' }
pi@raspberrypi~$node mdns.js
***警告***程序“节点”使用Avahi的Apple Bonjour兼容层。
***警告***请修复您的应用程序以使用Avahi的本机API!
***警告***有关更多信息,请参阅
***警告***名为“DNSServiceRegister()”的程序“node”在Avahi的Apple Bonjour兼容层中不受支持(或仅部分受支持)。
***警告***请修复您的应用程序以使用Avahi的本机API!
***警告***有关更多信息,请参阅
错误
{[Error:getaddrinfo-3008]代码:-3008,错误号:-3008,系统调用:'getaddrinfo'}
错误
{[Error:getaddrinfo-3008]代码:-3008,错误号:-3008,系统调用:'getaddrinfo'}
A,声明忽略这些警告是公平的


但是这两个错误呢?我的Raspberry PI上是否存在某种配置问题?

在这个GitHub问题上找到了解决方案:

在mdns中的lib/Browser.js中修改Browser.defaultResolverSequence


在本地修改节点模块代码是一种不好的做法

创建mdns浏览器时,最好执行以下操作:

var sequence = [
  mdns.rst.DNSServiceResolve(),
  'DNSServiceGetAddrInfo' in mdns.dns_sd ? mdns.rst.DNSServiceGetAddrInfo() : mdns.rst.getaddrinfo({families:[4]}),
  mdns.rst.makeAddressesUnique()
];
var browser = mdns.createBrowser(mdns.tcp('http'), {resolverSequence: sequence});
正如在这篇评论中所说:


因此,它将避免bug,并允许项目中的每个人都获得相同的版本,而不必在本地修改mdns代码。

仅供参考,
getaddrinfo
错误代码可以使用中定义的
gai_strerror
翻译为人类可读的文本。不幸的是,错误代码-3008被表示为“未知错误”。我的猜测是,错误代码来自于
getaddrinfo
函数以外的其他地方,可能是一些底层系统调用或其他什么……哪个版本的node.js正在raspberry pi上运行?
var sequence = [
  mdns.rst.DNSServiceResolve(),
  'DNSServiceGetAddrInfo' in mdns.dns_sd ? mdns.rst.DNSServiceGetAddrInfo() : mdns.rst.getaddrinfo({families:[4]}),
  mdns.rst.makeAddressesUnique()
];
var browser = mdns.createBrowser(mdns.tcp('http'), {resolverSequence: sequence});