12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- 'use strict';
- const tls = require('tls');
-
- module.exports = (options = {}, connect = tls.connect) => new Promise((resolve, reject) => {
- let timeout = false;
-
- let socket;
-
- const callback = async () => {
- await socketPromise;
-
- socket.off('timeout', onTimeout);
- socket.off('error', reject);
-
- if (options.resolveSocket) {
- resolve({alpnProtocol: socket.alpnProtocol, socket, timeout});
-
- if (timeout) {
- await Promise.resolve();
- socket.emit('timeout');
- }
- } else {
- socket.destroy();
- resolve({alpnProtocol: socket.alpnProtocol, timeout});
- }
- };
-
- const onTimeout = async () => {
- timeout = true;
- callback();
- };
-
- const socketPromise = (async () => {
- try {
- socket = await connect(options, callback);
-
- socket.on('error', reject);
- socket.once('timeout', onTimeout);
- } catch (error) {
- reject(error);
- }
- })();
- });
|