diff --git a/lib/core/connection/connect.js b/lib/core/connection/connect.js index f9fa06c239..15cfad5860 100644 --- a/lib/core/connection/connect.js +++ b/lib/core/connection/connect.js @@ -111,8 +111,15 @@ function performInitialHandshake(conn, options, _callback) { getSaslSupportedMechs(options) ); + const handshakeOptions = Object.assign({}, options); + + // The handshake technically is a monitoring check, so its socket timeout should be connectTimeoutMS + if (options.connectTimeoutMS || options.connectionTimeout) { + handshakeOptions.socketTimeout = options.connectTimeoutMS || options.connectionTimeout; + } + const start = new Date().getTime(); - runCommand(conn, 'admin.$cmd', handshakeDoc, options, (err, ismaster) => { + runCommand(conn, 'admin.$cmd', handshakeDoc, handshakeOptions, (err, ismaster) => { if (err) { callback(err); return; @@ -235,7 +242,11 @@ function makeConnection(family, options, cancellationToken, _callback) { typeof options.keepAliveInitialDelay === 'number' ? options.keepAliveInitialDelay : 300000; const noDelay = typeof options.noDelay === 'boolean' ? options.noDelay : true; const connectionTimeout = - typeof options.connectionTimeout === 'number' ? options.connectionTimeout : 30000; + typeof options.connectionTimeout === 'number' + ? options.connectionTimeout + : typeof options.connectTimeoutMS === 'number' + ? options.connectTimeoutMS + : 30000; const socketTimeout = typeof options.socketTimeout === 'number' ? options.socketTimeout : 360000; const rejectUnauthorized = typeof options.rejectUnauthorized === 'boolean' ? options.rejectUnauthorized : true; diff --git a/lib/core/sdam/monitor.js b/lib/core/sdam/monitor.js index 039e33ecc6..c8e3d4ad26 100644 --- a/lib/core/sdam/monitor.js +++ b/lib/core/sdam/monitor.js @@ -70,6 +70,7 @@ class Monitor extends EventEmitter { connectionType: Connection }, server.s.options, + this.options, // force BSON serialization options {