|
123456789101112131415161718192021222324252627282930313233 |
- 'use strict';
- const tls = require('tls');
-
- module.exports = (options = {}) => new Promise((resolve, reject) => {
- let timeout = false;
-
- const callback = async () => {
- 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 socket = tls.connect(options, callback);
-
- socket.on('error', reject);
- socket.once('timeout', onTimeout);
- });
|