- `localPort`: Local port to bind to for network connections.
- `family` : Version of IP stack. Defaults to `4`.
+
+ - `lookup` : Custom lookup function. Defaults to `dns.lookup`.
For local domain sockets, `options` argument should be an object which
specifies:
return;
}
+ if (options.lookup && typeof options.lookup !== 'function')
+ throw new TypeError('options.lookup should be a function.');
+
var dnsopts = {
family: options.family,
hints: 0
debug('connect: find host ' + host);
debug('connect: dns options ' + dnsopts);
self._host = host;
- dns.lookup(host, dnsopts, function(err, ip, addressType) {
+ var lookup = options.lookup || dns.lookup;
+ lookup(host, dnsopts, function(err, ip, addressType) {
self.emit('lookup', err, ip, addressType);
// It's possible we were destroyed while looking this up.
--- /dev/null
+var common = require('../common');
+var assert = require('assert');
+var net = require('net');
+var dns = require('dns');
+var ok = false;
+
+function check(addressType, cb) {
+ var server = net.createServer(function(client) {
+ client.end();
+ server.close();
+ cb && cb();
+ });
+
+ var address = addressType === 4 ? '127.0.0.1' : '::1';
+ server.listen(common.PORT, address, function() {
+ net.connect({
+ port: common.PORT,
+ host: 'localhost',
+ lookup: lookup
+ }).on('lookup', function(err, ip, type) {
+ assert.equal(err, null);
+ assert.equal(ip, address);
+ assert.equal(type, addressType);
+ ok = true;
+ });
+ });
+
+ function lookup(host, dnsopts, cb) {
+ dnsopts.family = addressType;
+ dns.lookup(host, dnsopts, cb);
+ }
+}
+
+check(4, function() {
+ common.hasIPv6 && check(6);
+});
+
+process.on('exit', function() {
+ assert.ok(ok);
+});