summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Ihrig <cjihrig@gmail.com>2016-04-01 16:59:09 -0400
committercjihrig <cjihrig@gmail.com>2016-04-01 17:03:42 -0400
commit39de601e1c3eda92eb2e37eca4e6aa960f206f39 (patch)
treeda2f8f5507597dcceaac91fa94a72ec429310690
parentd9391522309ce35eb469795f948feb8d217c9269 (diff)
downloadnode-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.markdown3
-rw-r--r--lib/net.js4
-rw-r--r--test/parallel/test-net-create-connection.js17
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