11var dgram = require ( 'dgram' ) ,
22 crypto = require ( 'crypto' ) ,
33 os = require ( 'os' ) ,
4+ broadcastAddress = require ( "broadcast-address" ) ,
45 EventEmitter = require ( 'events' ) . EventEmitter ,
56 util = require ( 'util' ) ,
67 uuid = require ( 'uuid/v4' ) ,
@@ -9,8 +10,8 @@ var dgram = require('dgram'),
910var procUuid = uuid ( ) ;
1011var hostName = process . env . DISCOVERY_HOSTNAME || os . hostname ( ) ;
1112
12- module . exports = Network ;
13-
13+ module . exports = Network ;
14+
1415function Network ( options ) {
1516 if ( ! ( this instanceof Network ) ) {
1617 return new Network ( options , callback ) ;
@@ -96,7 +97,29 @@ Network.prototype.start = function (callback) {
9697 self . socket . setBroadcast ( true ) ;
9798
9899 //TODO: get the default broadcast address from os.networkInterfaces() (not currently returned)
99- self . destination = [ self . broadcast || "255.255.255.255" ] ;
100+
101+ if ( self . broadcast ) {
102+ self . destination = Array . isArray ( self . broadcast ) ? self . broadcast . slice ( 0 ) : [ self . broadcast ] ;
103+ } else {
104+ self . destination = [ ] ;
105+ var networkInterfaces = os . networkInterfaces ( ) ;
106+ for ( var interfaceName in networkInterfaces ) {
107+ if ( ! networkInterfaces . hasOwnProperty ( interfaceName ) ) {
108+ continue ;
109+ }
110+ for ( var i = 0 ; i < networkInterfaces [ interfaceName ] . length ; i ++ ) {
111+ var iface = networkInterfaces [ interfaceName ] [ i ] ;
112+ if ( iface . internal || iface . family !== "IPv4" ) {
113+ continue ;
114+ }
115+
116+ var broadcast = broadcastAddress ( interfaceName , iface . address ) ;
117+ if ( broadcast ) {
118+ self . destination . push ( broadcast ) ;
119+ }
120+ }
121+ }
122+ }
100123 }
101124 else {
102125 try {
@@ -149,7 +172,7 @@ Network.prototype.send = function (event) {
149172 }
150173
151174 var msg = Buffer . from ( contents ) ;
152-
175+
153176 self . destination . forEach ( function ( destination ) {
154177 self . socket . send (
155178 msg
0 commit comments