树莓PI mdns getaddrinfo 3008错误

我有这个示例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上工作正常,并find两个服务。 如果我在运行Raspbean的 Raspberry PI 2 (连接到同一networking)上运行完全相同的脚本, 则会得到以下输出:

 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' } 

关于mdns GitHub的一个问题 ,指出忽略警告是公平的。

但是这两个错误呢? 这是我的树莓派上的某种configuration问题吗?

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

创buildmdns浏览器时,最好做以下事情:

 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}); 

就像在这个评论中说: https : //github.com/agnat/node_mdns/issues/130#issuecomment-120731155

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

在这个GitHub的问题上find了一个解决scheme: https : //github.com/agnat/node_mdns/issues/130

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

 Browser.defaultResolverSequence = [ rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]}) , rst.makeAddressesUnique() ];