diff --git a/doc/api/errors.md b/doc/api/errors.md index 5c38dde4130..5e94535a3ea 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -1042,6 +1042,11 @@ The `inspector` module is not available for use. While using the `inspector` module, an attempt was made to use the inspector before it was connected. + +### ERR_INVALID_ADDRESS_FAMILY + +The provided address family is not understood by the Node.js API. + ### ERR_INVALID_ARG_TYPE diff --git a/lib/internal/errors.js b/lib/internal/errors.js index d5260bd501f..33a3185f797 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -737,6 +737,7 @@ E('ERR_INSPECTOR_ALREADY_CONNECTED', E('ERR_INSPECTOR_CLOSED', 'Session was closed', Error); E('ERR_INSPECTOR_NOT_AVAILABLE', 'Inspector is not available', Error); E('ERR_INSPECTOR_NOT_CONNECTED', 'Session is not connected', Error); +E('ERR_INVALID_ADDRESS_FAMILY', 'Invalid address family: %s', RangeError); E('ERR_INVALID_ARG_TYPE', invalidArgType, TypeError); E('ERR_INVALID_ARG_VALUE', (name, value, reason = 'is invalid') => { const util = lazyUtil(); diff --git a/lib/net.js b/lib/net.js index 19f5b135891..466531744ee 100644 --- a/lib/net.js +++ b/lib/net.js @@ -54,6 +54,7 @@ const { } = require('internal/async_hooks'); const errors = require('internal/errors'); const { + ERR_INVALID_ADDRESS_FAMILY, ERR_INVALID_ARG_TYPE, ERR_INVALID_FD_TYPE, ERR_INVALID_IP_ADDRESS, @@ -1117,6 +1118,12 @@ function lookupAndConnect(self, options) { err.port = options.port; err.message = err.message + ' ' + options.host + ':' + options.port; process.nextTick(connectErrorNT, self, err); + } else if (addressType !== 4 && addressType !== 6) { + err = new ERR_INVALID_ADDRESS_FAMILY(addressType); + err.host = options.host; + err.port = options.port; + err.message = err.message + ' ' + options.host + ':' + options.port; + process.nextTick(connectErrorNT, self, err); } else { self._unrefTimer(); defaultTriggerAsyncIdScope( diff --git a/test/parallel/test-net-options-lookup.js b/test/parallel/test-net-options-lookup.js index 0b4e18f12f0..007be66f451 100644 --- a/test/parallel/test-net-options-lookup.js +++ b/test/parallel/test-net-options-lookup.js @@ -29,5 +29,14 @@ function connectDoesNotThrow(input) { lookup: input }; - net.connect(opts); + return net.connect(opts); +} + +{ + // Verify that an error is emitted when an invalid address family is returned. + const s = connectDoesNotThrow((host, options, cb) => { + cb(null, '127.0.0.1', 100); + }); + + s.on('error', common.expectsError({ code: 'ERR_INVALID_ADDRESS_FAMILY' })); }