udp6 and timeout fix
This commit is contained in:
		
							parent
							
								
									2f318607a1
								
							
						
					
					
						commit
						36d7aaccbb
					
				@ -93,6 +93,10 @@ cli.main(function (args, cli) {
 | 
				
			|||||||
    if (!cli.timeout) {
 | 
					    if (!cli.timeout) {
 | 
				
			||||||
      cli.timeout = 3000;
 | 
					      cli.timeout = 3000;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    if (!cli.timeout) {
 | 
				
			||||||
 | 
					      cli.timeout = 5000;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!cli.type) {
 | 
					  if (!cli.type) {
 | 
				
			||||||
@ -228,7 +232,7 @@ cli.main(function (args, cli) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (cli.debug) {
 | 
					    if (cli.debug) {
 | 
				
			||||||
      console.log('');
 | 
					      console.log('');
 | 
				
			||||||
      console.log('Bound and Listening:');
 | 
					      console.log('Bound and Listening:', server.type);
 | 
				
			||||||
      console.log(server.address());
 | 
					      console.log(server.address());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -256,6 +260,9 @@ cli.main(function (args, cli) {
 | 
				
			|||||||
        console.log('request sent to', res.nameserver);
 | 
					        console.log('request sent to', res.nameserver);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  , onTimeout: function (res) {
 | 
				
			||||||
 | 
					      console.log("Timeout after " + res.timeout + "ms: No response received.");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  , mdns: cli.mdns
 | 
					  , mdns: cli.mdns
 | 
				
			||||||
  , nameserver: cli.nameserver
 | 
					  , nameserver: cli.nameserver
 | 
				
			||||||
  , port: cli.port
 | 
					  , port: cli.port
 | 
				
			||||||
 | 
				
			|||||||
@ -6,17 +6,31 @@ var dgram = require('dgram');
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function request(queryAb, opts) {
 | 
					function request(queryAb, opts) {
 | 
				
			||||||
  var handlers = {};
 | 
					  var handlers = {};
 | 
				
			||||||
 | 
					  var nameservers;
 | 
				
			||||||
 | 
					  var nameserver = opts.nameserver;
 | 
				
			||||||
 | 
					  var index;
 | 
				
			||||||
 | 
					  var udpType;
 | 
				
			||||||
 | 
					  var receivedMessage;
 | 
				
			||||||
 | 
					  if (!nameserver) {
 | 
				
			||||||
 | 
					    nameservers = require('dns').getServers();
 | 
				
			||||||
 | 
					    index = crypto.randomBytes(2).readUInt16BE(0) % nameservers.length;
 | 
				
			||||||
 | 
					    nameserver = nameservers[index];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  udpType = /:/.test(nameserver) ? 'udp6' : 'udp4';
 | 
				
			||||||
  var server = dgram.createSocket({
 | 
					  var server = dgram.createSocket({
 | 
				
			||||||
    type: 'udp4'
 | 
					    type: udpType
 | 
				
			||||||
  , reuseAddr: true
 | 
					  , reuseAddr: true
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					  server.nameserver = nameserver;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handlers.onError = function (err) {
 | 
					  handlers.onError = function (err) {
 | 
				
			||||||
    if (opts.onError) { opts.onError(err); }
 | 
					    if (opts.onError) { opts.onError(err); }
 | 
				
			||||||
    server.close();
 | 
					    server.close();
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  handlers.onMessage = function (bin) {
 | 
					  handlers.onMessage = function (bin) {
 | 
				
			||||||
 | 
					    receivedMessage = true;
 | 
				
			||||||
    if (!opts.mdns) {
 | 
					    if (!opts.mdns) {
 | 
				
			||||||
 | 
					      clearTimeout(server._timeoutToken);
 | 
				
			||||||
      server.close();
 | 
					      server.close();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -25,19 +39,10 @@ function request(queryAb, opts) {
 | 
				
			|||||||
  handlers.onListening = function () {
 | 
					  handlers.onListening = function () {
 | 
				
			||||||
    /*jshint validthis:true*/
 | 
					    /*jshint validthis:true*/
 | 
				
			||||||
    var server = this;
 | 
					    var server = this;
 | 
				
			||||||
    var nameservers;
 | 
					 | 
				
			||||||
    var index;
 | 
					 | 
				
			||||||
    server.nameserver = opts.nameserver;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!server.nameserver) {
 | 
					    if (opts.mdns || '224.0.0.251' === server.nameserver) {
 | 
				
			||||||
      nameservers = require('dns').getServers();
 | 
					 | 
				
			||||||
      index = crypto.randomBytes(2).readUInt16BE(0) % nameservers.length;
 | 
					 | 
				
			||||||
      server.nameserver = nameservers[index];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (opts.mdns || '224.0.0.251' === opts.nameserver) {
 | 
					 | 
				
			||||||
      server.setBroadcast(true);
 | 
					      server.setBroadcast(true);
 | 
				
			||||||
      server.addMembership(opts.nameserver);
 | 
					      server.addMembership(server.nameserver || '224.0.0.251');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (opts.onListening) { opts.onListening.apply(server); }
 | 
					    if (opts.onListening) { opts.onListening.apply(server); }
 | 
				
			||||||
@ -56,13 +61,15 @@ function request(queryAb, opts) {
 | 
				
			|||||||
  // 5353 mdns
 | 
					  // 5353 mdns
 | 
				
			||||||
  if (opts.mdns) {
 | 
					  if (opts.mdns) {
 | 
				
			||||||
    server.bind(opts.port /*5353*/);
 | 
					    server.bind(opts.port /*5353*/);
 | 
				
			||||||
    setTimeout(function () {
 | 
					 | 
				
			||||||
      server.close();
 | 
					 | 
				
			||||||
    }, opts.timeout || (5 * 1000));
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  else {
 | 
					  else {
 | 
				
			||||||
    server.bind(0);
 | 
					    server.bind(0);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  var ms = opts.timeout || (5 * 1000);
 | 
				
			||||||
 | 
					  server._timeoutToken = setTimeout(function () {
 | 
				
			||||||
 | 
					    if (!receivedMessage && opts.onTimeout) { opts.onTimeout({ timeout: ms }); }
 | 
				
			||||||
 | 
					    server.close();
 | 
				
			||||||
 | 
					  }, ms);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function requestJson(query, opts) {
 | 
					function requestJson(query, opts) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user