2015-04-12 147 views
9

我有這個樣本的Node.js腳本:樹莓PI MDNS的getaddrinfo 3008錯誤

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上它的正常工作,而且兩個服務被發現。如果我在我的樹莓PI 2運行Raspbean(連接到同一網絡)上運行完全一樣的劇本,我得到這樣的輸出:

[email protected] ~ $ 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' } 

一個issue on the mdns GitHub,說這是公平地忽略警告。

但是,這兩個錯誤呢?這是我的Raspberry PI上的某種配置問題嗎?

+0

node.js的哪個版本在覆盆子pi上運行? – flotto

回答

1

溶液對這個問題GitHub的發現:在MDNS https://github.com/agnat/node_mdns/issues/130

修改Browser.defaultResolverSequence的lib/browser.js

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

在本地修改節點模塊代碼是一種不好的做法。

你最好做以下當你創建一個mdns的瀏覽器:https://github.com/agnat/node_mdns/issues/130#issuecomment-120731155

因此,將避免錯誤,並讓每個人都參與這個項目獲得:

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

如在此評論說:相同的版本,不必修改本地的mdns代碼。