2015-04-12 2 views
9

Я этот пример Node.js сценария:Raspberry 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 он работает нормально, и две службы найдено. Если я запускаю тот же скрипт на моем Raspberry 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

Только для вашей информации коды ошибок getaddrinfo могут быть переведены в текст, читаемый человеком, с использованием 'gai_strerror', определенного в [' netdb.h'] (http://pubs.opengroup.org/onlinepubs/7908799/ XNS/netdb.h.html). К сожалению, код ошибки -3008 представлен как «Неизвестная ошибка». Я предполагаю, что код ошибки происходит откуда-то еще, кроме функции getaddrinfo, возможно, какой-то базовый системный вызов или что-то еще ... –

+0

какая версия node.js работает на малине pi? – flotto

ответ

1

Решение было найдено в этом вопросе GitHub: https://github.com/agnat/node_mdns/issues/130

Изменить Browser.defaultResolverSequence внутри Библиотека/browser.js в MDNS.

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

Плохая практика изменения кода модулей узлов локально.

Вы должны лучше выполнить следующие действия при создании MDNS Browser:

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.

Смежные вопросы