in apps/mountebank-mock/mountebank-source/src/mountebank.js [181:233]
async function listen (app, options) {
const hostname = options.host || 'localhost',
baseURL = `http://${hostname}:${options.port}`,
logger = utilLogger.createLogger(options),
isAllowedConnection = utilIp.createIPVerification(options);
return new Promise(resolve => {
const connections = {},
server = app.listen(options.port, options.host, () => {
logger.info(`mountebank v${thisPackage.version} now taking orders - point your browser to ${baseURL}/ for help`);
logger.debug(`config: ${JSON.stringify({
options: options,
process: {
nodeVersion: process.version,
architecture: process.arch,
platform: process.platform
}
})}`);
resolve({
close: callback => {
server.close(() => {
logger.info('Adios - see you soon?');
callback();
});
// Force kill any open connections to prevent process hanging
Object.keys(connections).forEach(socket => {
connections[socket].destroy();
});
}
});
});
server.on('connection', socket => {
const name = helpers.socketName(socket),
ipAddress = socket.remoteAddress;
connections[name] = socket;
socket.on('close', () => {
delete connections[name];
});
socket.on('error', error => {
logger.error(`${name} transmission error X=> ${JSON.stringify(error)}`);
});
if (!isAllowedConnection(ipAddress, logger)) {
socket.destroy();
}
});
});
}