2015-04-12 18 views
9

ich diese Probe haben Node.js Skript:Raspberry PI mdns getaddrinfo 3008 Fehler

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

Auf meinem Mac funktioniert es gut, und zwei Dienste zu finden ist. Wenn ich genau die gleiche Skript auf mein Raspberry PI 2 läuft Raspbean (verbunden mit dem gleichen Netzwerk) laufen lasse, erhalte ich diese Ausgabe:

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

A issue on the mdns GitHub, heißt es, dass es fair ist, die Warnungen zu ignorieren.

Aber was ist mit den zwei Fehlern? Ist das eine Art von Konfigurationsproblem auf meinem Raspberry PI?

+0

Nur zu Ihrer Information können "getaddrinfo" -Fehlercodes mit 'gai_strerror', definiert in [' netdb.h'] (http://pubs.opengroup.org/onlinepubs/7908799/), in lesbaren Text übersetzt werden. xns/netdb.h.html). Leider wird der Fehlercode -3008 als "Unbekannter Fehler" dargestellt. Meine Vermutung ist, dass der Fehlercode von woanders als die "getaddrinfo" -Funktion kommt, vielleicht ein zugrunde liegender Systemaufruf oder was auch immer ... –

+0

Welche Version von node.js läuft auf dem Raspberry Pi? – flotto

Antwort

1

Eine Lösung zu diesem Problem GitHub gefunden: https://github.com/agnat/node_mdns/issues/130

Ändern Browser.defaultResolverSequence innerhalb lib/browser.js in mdns.

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

Es ist eine schlechte Übung, Knotenmodulcode lokal zu ändern.

Sie sollten besser Folgendes tun, wenn Sie einen mdns Browser erstellen:

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

sagte wie in diesem Kommentar: https://github.com/agnat/node_mdns/issues/130#issuecomment-120731155

So wird es Fehler vermieden werden und alle an dem Projekt arbeiten zu erhalten die gleiche Version und muss nicht lokal ändern MDNs-Code.