Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
net: add lookup option to Socket.prototype.connect
Allows customization of the lookup function used when
Socket.prototype.connect is called using a hostname.

PR-URL: #1505
Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com>
Reviewed-By: Yosuke Furukawa <yosuke.furukawa@gmail.com>
  • Loading branch information
evanlucas committed Apr 24, 2015
commit 4abe2fa1cfcc434952570c1c979dd4ce150fba67
2 changes: 2 additions & 0 deletions doc/api/net.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,8 @@ For TCP sockets, `options` argument should be an object which specifies:
- `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:
Expand Down
6 changes: 5 additions & 1 deletion lib/net.js
Original file line number Diff line number Diff line change
Expand Up @@ -916,6 +916,9 @@ function lookupAndConnect(self, options) {
return;
}

if (options.lookup && typeof options.lookup !== 'function')
throw new TypeError('options.lookup should be a function.');

var dnsopts = {
family: options.family,
hints: 0
Expand All @@ -927,7 +930,8 @@ function lookupAndConnect(self, options) {
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.
Expand Down
40 changes: 40 additions & 0 deletions test/parallel/test-net-dns-custom-lookup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
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);
});