mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
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>
This commit is contained in:
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.
|
||||
|
||||
- `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:
|
||||
|
@ -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
|
||||
@ -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.
|
||||
|
40
test/parallel/test-net-dns-custom-lookup.js
Normal file
40
test/parallel/test-net-dns-custom-lookup.js
Normal file
@ -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
Block a user