From b9c65f2d5882ad7cbd29c47ef3a599c29a1cd322 Mon Sep 17 00:00:00 2001 From: Jonathan Rainville Date: Thu, 23 Aug 2018 15:11:43 -0400 Subject: [PATCH] use listen(0) to find a port --- lib/modules/webserver/index.js | 21 ++++++++++++--------- lib/modules/webserver/server.js | 14 ++++++++------ 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/lib/modules/webserver/index.js b/lib/modules/webserver/index.js index 8fd62d734..a0b948502 100644 --- a/lib/modules/webserver/index.js +++ b/lib/modules/webserver/index.js @@ -18,13 +18,15 @@ class WebServer { this.events.emit("status", __("Starting Server")); + this.server = new Server({host: this.host, port: this.port}); this.testPort(() => { - this.server = new Server({host: this.host, port: this.port}); - - this.setServiceCheck(); this.listenToCommands(); this.registerConsoleCommands(); - this.server.start((_err, message) => this.logger.info(message)); + this.server.start((_err, message, port) => { + this.logger.info(message); + this.port = port; + this.setServiceCheck(); + }); }); } @@ -33,17 +35,18 @@ class WebServer { if (err) { // Port is ok return done(); } - this.logger.warn(__('Webserver already running on port {{oldPort}}. Trying to connect on {{newPort}}', - {oldPort: this.port, newPort: this.port + 1})); - this.port++; - this.testPort(done); + this.logger.warn(__('Webserver already running on port %s. Assigning an available port', this.port)); + this.port = 0; + this.server.port = 0; + done(); }); } setServiceCheck() { - let url = 'http://' + canonicalHost(this.host) + ':' + this.port; + const self = this; this.events.request("services:register", 'Webserver', function (cb) { + let url = 'http://' + canonicalHost(self.host) + ':' + self.port; utils.checkIsAvailable(url, function (available) { let devServer = __('Webserver') + ' (' + url + ')'; let serverStatus = (available ? 'on' : 'off'); diff --git a/lib/modules/webserver/server.js b/lib/modules/webserver/server.js index 40356be6b..340f5307c 100644 --- a/lib/modules/webserver/server.js +++ b/lib/modules/webserver/server.js @@ -24,12 +24,14 @@ class Server { serve(req, res, finalhandler(req, res)); }).withShutdown(); - let message = __("webserver available at") + - " " + - ("http://" + canonicalHost(this.hostname) + - ":" + this.port).bold.underline.green; - this.server.listen(this.port, this.hostname); - callback(null, message); + + this.server.listen(this.port, this.hostname, () => { + this.port = this.server.address().port; + callback(null, __("webserver available at") + + " " + + ("http://" + canonicalHost(this.hostname) + + ":" + this.port).bold.underline.green, this.port); + }); } stop(callback) {