diff options
author | Colin Ihrig <cjihrig@gmail.com> | 2016-04-01 16:59:09 -0400 |
---|---|---|
committer | cjihrig <cjihrig@gmail.com> | 2016-04-01 17:03:42 -0400 |
commit | 39de601e1c3eda92eb2e37eca4e6aa960f206f39 (patch) | |
tree | da2f8f5507597dcceaac91fa94a72ec429310690 | |
parent | d9391522309ce35eb469795f948feb8d217c9269 (diff) | |
download | node-new-39de601e1c3eda92eb2e37eca4e6aa960f206f39.tar.gz |
net: support DNS hints in createConnection()
This commit adds support for passing DNS lookup hints to
createConnection().
PR-URL: https://github.com/nodejs/node/pull/6000
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r-- | doc/api/net.markdown | 3 | ||||
-rw-r--r-- | lib/net.js | 4 | ||||
-rw-r--r-- | test/parallel/test-net-create-connection.js | 17 |
3 files changed, 16 insertions, 8 deletions
diff --git a/doc/api/net.markdown b/doc/api/net.markdown index 451b5f44ab..10129c13b8 100644 --- a/doc/api/net.markdown +++ b/doc/api/net.markdown @@ -375,6 +375,8 @@ For TCP sockets, `options` argument should be an object which specifies: - `family` : Version of IP stack. Defaults to `4`. + - `hints`: [`dns.lookup()` hints][]. Defaults to `0`. + - `lookup` : Custom lookup function. Defaults to `dns.lookup`. For local domain sockets, `options` argument should be an object which @@ -720,6 +722,7 @@ Returns true if input is a version 6 IP address, otherwise returns false. [`connect()`]: #net_socket_connect_options_connectlistener [`destroy()`]: #net_socket_destroy [`dns.lookup()`]: dns.html#dns_dns_lookup_hostname_options_callback +[`dns.lookup()` hints]: #dns_supported_getaddrinfo_flags [`end()`]: #net_socket_end_data_encoding [`EventEmitter`]: events.html#events_class_events_eventemitter [`net.Socket`]: #net_class_net_socket diff --git a/lib/net.js b/lib/net.js index 09c582d9d7..37797bedbc 100644 --- a/lib/net.js +++ b/lib/net.js @@ -946,10 +946,10 @@ function lookupAndConnect(self, options) { var dnsopts = { family: options.family, - hints: 0 + hints: options.hints || 0 }; - if (dnsopts.family !== 4 && dnsopts.family !== 6) { + if (dnsopts.family !== 4 && dnsopts.family !== 6 && dnsopts.hints === 0) { dnsopts.hints = dns.ADDRCONFIG; // The AI_V4MAPPED hint is not supported on FreeBSD or Android, // and getaddrinfo returns EAI_BADFLAGS. However, it seems to be diff --git a/test/parallel/test-net-create-connection.js b/test/parallel/test-net-create-connection.js index 44ae62b343..6cc71c7afa 100644 --- a/test/parallel/test-net-create-connection.js +++ b/test/parallel/test-net-create-connection.js @@ -1,14 +1,15 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var net = require('net'); +const common = require('../common'); +const assert = require('assert'); +const dns = require('dns'); +const net = require('net'); -var tcpPort = common.PORT; -var expectedConnections = 7; +const tcpPort = common.PORT; +const expectedConnections = 7; var clientConnected = 0; var serverConnected = 0; -var server = net.createServer(function(socket) { +const server = net.createServer(function(socket) { socket.end(); if (++serverConnected === expectedConnections) { server.close(); @@ -87,6 +88,10 @@ server.listen(tcpPort, 'localhost', function() { fail({ port: 65536 }, RangeError, '"port" option should be >= 0 and < 65536: 65536'); + + fail({ + hints: (dns.ADDRCONFIG | dns.V4MAPPED) + 42, + }, TypeError, 'Invalid argument: hints must use valid flags'); }); // Try connecting to random ports, but do so once the server is closed |