constructor(config, worker) {
        this.config = config;
        this.worker = worker;
        this.cluster = true;
        this.servers = [];
        http.globalAgent = new HttpAgent({
            keepAlive: true,
            freeSocketTimeout: arsenal.constants.httpClientFreeSocketTimeout,
        });

        process.on('SIGINT', this.cleanUp.bind(this));
        process.on('SIGHUP', this.cleanUp.bind(this));
        process.on('SIGQUIT', this.cleanUp.bind(this));
        process.on('SIGTERM', this.cleanUp.bind(this));
        process.on('SIGPIPE', () => { });
        // This will pick up exceptions up the stack
        process.on('uncaughtException', err => {
            // If just send the error object results in empty
            // object on server log.
            logger.fatal('caught error', {
                error: err.message,
                stack: err.stack,
                workerId: this.worker ? this.worker.id : undefined,
                workerPid: this.worker ? this.worker.process.pid : undefined,
            });
            this.caughtExceptionShutdown();
        });
        this.started = false;
    }
This represents our S3 connector.
@constructor
@param {Object} config - Configuration object
@param {Worker} [worker=null] - Track the worker when using cluster