2015-04-12 64 views
9

Tôi've này sample Node.js script:Raspberry PI mdns getaddrinfo 3008 error

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

On my Mac it của working fine và 2 services là found. Nếu tôi chạy kịch bản chính xác như nhau trên tôi Raspberry PI 2 chạy Raspbean (kết nối với cùng một mạng), tôi nhận được kết quả này:

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

Một issue on the mdns GitHub, nói rằng nó là công bằng để bỏ qua những lời cảnh báo.

Nhưng còn hai lỗi thì sao? Có phải đó là một số vấn đề về cấu hình trên Raspberry PI của tôi không?

+0

Chỉ để biết thông tin của bạn, mã lỗi 'getaddrinfo' có thể được dịch thành văn bản có thể đọc được bằng cách sử dụng' gai_strerror', được định nghĩa trong ['netdb.h'] (http://pubs.opengroup.org/onlinepubs/7908799/ xns/netdb.h.html). Rất tiếc, mã lỗi -3008 được biểu thị là "Lỗi không xác định". Đoán của tôi là mã lỗi đến từ một nơi nào đó khác với hàm 'getaddrinfo', có lẽ một số cuộc gọi hệ thống cơ bản hoặc bất cứ điều gì ... –

+0

phiên bản nào của node.js đang chạy trên mâm xôi pi? – flotto

Trả lời

1

Một giải pháp đã được tìm thấy về vấn đề GitHub này: https://github.com/agnat/node_mdns/issues/130

Sửa Browser.defaultResolverSequence bên lib/browser.js trong mDNS.

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

Thực tiễn không tốt là sửa đổi mã mô-đun nút cục bộ.

Bạn nên tốt hơn làm những việc sau khi bạn tạo một trình duyệt 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}); 

Giống như nói trong nhận xét này: https://github.com/agnat/node_mdns/issues/130#issuecomment-120731155

Do đó, nó sẽ tránh được lỗi và cho phép tất cả mọi người làm việc trên dự án để có được cùng một phiên bản và không phải sửa đổi mã mdns cục bộ.

Các vấn đề liên quan