Skip to content

Commit 8a07893

Browse files
committed
refactor: simplify connect, reuse a set for error event names
1 parent f3a8093 commit 8a07893

File tree

1 file changed

+8
-31
lines changed

1 file changed

+8
-31
lines changed

lib/core/connection/connect.js

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,34 +20,14 @@ function connect(options, callback) {
2020
AUTH_PROVIDERS = defaultAuthProviders(options.bson);
2121
}
2222

23-
if (options.family !== void 0) {
24-
makeConnection(options.family, options, (err, socket) => {
25-
if (err) {
26-
callback(err, socket); // in the error case, `socket` is the originating error event name
27-
return;
28-
}
29-
30-
performInitialHandshake(new ConnectionType(socket, options), options, callback);
31-
});
32-
33-
return;
34-
}
35-
36-
return makeConnection(6, options, (err, ipv6Socket) => {
23+
const family = options.family !== void 0 ? options.family : 0;
24+
makeConnection(family, options, (err, socket) => {
3725
if (err) {
38-
makeConnection(0, options, (err, ipv4Socket) => {
39-
if (err) {
40-
callback(err, ipv4Socket); // in the error case, `ipv4Socket` is the originating error event name
41-
return;
42-
}
43-
44-
performInitialHandshake(new ConnectionType(ipv4Socket, options), options, callback);
45-
});
46-
26+
callback(err, socket); // in the error case, `socket` is the originating error event name
4727
return;
4828
}
4929

50-
performInitialHandshake(new ConnectionType(ipv6Socket, options), options, callback);
30+
performInitialHandshake(new ConnectionType(socket, options), options, callback);
5131
});
5232
}
5333

@@ -238,6 +218,7 @@ function parseSslOptions(family, options) {
238218
return result;
239219
}
240220

221+
const SOCKET_ERROR_EVENTS = new Set(['error', 'close', 'timeout', 'parseError']);
241222
function makeConnection(family, options, _callback) {
242223
const useSsl = typeof options.ssl === 'boolean' ? options.ssl : false;
243224
const keepAlive = typeof options.keepAlive === 'boolean' ? options.keepAlive : true;
@@ -279,17 +260,16 @@ function makeConnection(family, options, _callback) {
279260
socket.setTimeout(connectionTimeout);
280261
socket.setNoDelay(noDelay);
281262

282-
const errorEvents = ['error', 'close', 'timeout', 'parseError'];
283263
function errorHandler(eventName) {
284264
return err => {
285-
errorEvents.forEach(event => socket.removeAllListeners(event));
265+
SOCKET_ERROR_EVENTS.forEach(event => socket.removeAllListeners(event));
286266
socket.removeListener('connect', connectHandler);
287267
callback(connectionFailureError(eventName, err), eventName);
288268
};
289269
}
290270

291271
function connectHandler() {
292-
errorEvents.forEach(event => socket.removeAllListeners(event));
272+
SOCKET_ERROR_EVENTS.forEach(event => socket.removeAllListeners(event));
293273
if (socket.authorizationError && rejectUnauthorized) {
294274
return callback(socket.authorizationError);
295275
}
@@ -298,10 +278,7 @@ function makeConnection(family, options, _callback) {
298278
callback(null, socket);
299279
}
300280

301-
socket.once('error', errorHandler('error'));
302-
socket.once('close', errorHandler('close'));
303-
socket.once('timeout', errorHandler('timeout'));
304-
socket.once('parseError', errorHandler('parseError'));
281+
SOCKET_ERROR_EVENTS.forEach(event => socket.once(event, errorHandler(event)));
305282
socket.once('connect', connectHandler);
306283
}
307284

0 commit comments

Comments
 (0)