@@ -124,12 +124,14 @@ const {
124124 DTRACE_NET_SERVER_CONNECTION ,
125125 DTRACE_NET_STREAM_END ,
126126} = require ( 'internal/dtrace' ) ;
127+ const { getOptionValue } = require ( 'internal/options' ) ;
127128
128129// Lazy loaded to improve startup performance.
129130let cluster ;
130131let dns ;
131132let BlockList ;
132133let SocketAddress ;
134+ let autoSelectFamilyDefault = getOptionValue ( '--enable-network-family-autoselection' ) ;
133135
134136const { clearTimeout, setTimeout } = require ( 'timers' ) ;
135137const { kTimeout } = require ( 'internal/timers' ) ;
@@ -243,6 +245,14 @@ function connect(...args) {
243245 return socket . connect ( normalized ) ;
244246}
245247
248+ function getDefaultAutoSelectFamily ( ) {
249+ return autoSelectFamilyDefault ;
250+ }
251+
252+ function setDefaultAutoSelectFamily ( value ) {
253+ validateBoolean ( value , 'value' ) ;
254+ autoSelectFamilyDefault = value ;
255+ }
246256
247257// Returns an array [options, cb], where options is an object,
248258// cb is either a function or null.
@@ -1115,6 +1125,8 @@ function internalConnectMultiple(context) {
11151125 req . localAddress = localAddress ;
11161126 req . localPort = localPort ;
11171127
1128+ ArrayPrototypePush ( self . autoSelectFamilyAttemptedAddresses , `${ address } :${ port } ` ) ;
1129+
11181130 if ( addressType === 4 ) {
11191131 err = handle . connect ( req , address , port ) ;
11201132 } else {
@@ -1207,9 +1219,9 @@ function socketToDnsFamily(family) {
12071219}
12081220
12091221function lookupAndConnect ( self , options ) {
1210- const { localAddress, localPort, autoSelectFamily } = options ;
1222+ const { localAddress, localPort } = options ;
12111223 const host = options . host || 'localhost' ;
1212- let { port, autoSelectFamilyAttemptTimeout } = options ;
1224+ let { port, autoSelectFamilyAttemptTimeout, autoSelectFamily } = options ;
12131225
12141226 if ( localAddress && ! isIP ( localAddress ) ) {
12151227 throw new ERR_INVALID_IP_ADDRESS ( localAddress ) ;
@@ -1228,11 +1240,14 @@ function lookupAndConnect(self, options) {
12281240 }
12291241 port |= 0 ;
12301242
1231- if ( autoSelectFamily !== undefined ) {
1232- validateBoolean ( autoSelectFamily ) ;
1243+
1244+ if ( autoSelectFamily != null ) {
1245+ validateBoolean ( autoSelectFamily , 'options.autoSelectFamily' ) ;
1246+ } else {
1247+ autoSelectFamily = autoSelectFamilyDefault ;
12331248 }
12341249
1235- if ( autoSelectFamilyAttemptTimeout !== undefined ) {
1250+ if ( autoSelectFamilyAttemptTimeout != null ) {
12361251 validateInt32 ( autoSelectFamilyAttemptTimeout , 'options.autoSelectFamilyAttemptTimeout' , 1 ) ;
12371252
12381253 if ( autoSelectFamilyAttemptTimeout < 10 ) {
@@ -1256,7 +1271,7 @@ function lookupAndConnect(self, options) {
12561271 return ;
12571272 }
12581273
1259- if ( options . lookup !== undefined )
1274+ if ( options . lookup != null )
12601275 validateFunction ( options . lookup , 'options.lookup' ) ;
12611276
12621277 if ( dns === undefined ) dns = require ( 'dns' ) ;
@@ -1393,6 +1408,8 @@ function lookupAndConnectMultiple(self, async_id_symbol, lookup, host, options,
13931408 }
13941409 }
13951410
1411+ self . autoSelectFamilyAttemptedAddresses = [ ] ;
1412+
13961413 const context = {
13971414 socket : self ,
13981415 addresses,
@@ -2249,4 +2266,6 @@ module.exports = {
22492266 Server,
22502267 Socket,
22512268 Stream : Socket , // Legacy naming
2269+ getDefaultAutoSelectFamily,
2270+ setDefaultAutoSelectFamily,
22522271} ;
0 commit comments