mirror of https://github.com/nodejs/node.git
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: https://github.com/iojs/io.js/pull/1505 Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com> Reviewed-By: Yosuke Furukawa <yosuke.furukawa@gmail.com>pull/1516/merge
parent
1bef717476
commit
4abe2fa1cf
|
@ -355,6 +355,8 @@ For TCP sockets, `options` argument should be an object which specifies:
|
||||||
- `localPort`: Local port to bind to for network connections.
|
- `localPort`: Local port to bind to for network connections.
|
||||||
|
|
||||||
- `family` : Version of IP stack. Defaults to `4`.
|
- `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
|
For local domain sockets, `options` argument should be an object which
|
||||||
specifies:
|
specifies:
|
||||||
|
|
|
@ -916,6 +916,9 @@ function lookupAndConnect(self, options) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.lookup && typeof options.lookup !== 'function')
|
||||||
|
throw new TypeError('options.lookup should be a function.');
|
||||||
|
|
||||||
var dnsopts = {
|
var dnsopts = {
|
||||||
family: options.family,
|
family: options.family,
|
||||||
hints: 0
|
hints: 0
|
||||||
|
@ -927,7 +930,8 @@ function lookupAndConnect(self, options) {
|
||||||
debug('connect: find host ' + host);
|
debug('connect: find host ' + host);
|
||||||
debug('connect: dns options ' + dnsopts);
|
debug('connect: dns options ' + dnsopts);
|
||||||
self._host = host;
|
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);
|
self.emit('lookup', err, ip, addressType);
|
||||||
|
|
||||||
// It's possible we were destroyed while looking this up.
|
// It's possible we were destroyed while looking this up.
|
||||||
|
|
|
@ -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);
|
||||||
|
});
|
Loading…
Reference in New Issue