Skip to content

Commit

Permalink
Add treatment of port occupied
Browse files Browse the repository at this point in the history
  • Loading branch information
dafeng.xdf committed Oct 11, 2014
1 parent c8c3afb commit 755bf9e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 8 deletions.
33 changes: 26 additions & 7 deletions bin/startserver
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
process.title = 'startserver';

var path = require('path');
var net = require('net');
var util = require('xutil');
var ipv4 = require('ipv4') || 'localhost';
var StartServer = require('../');
Expand All @@ -37,7 +38,7 @@ program
.option('-v, --versions', 'output version infomation')
.option('-n, --normal', 'start server without opening browser')
.option('-s, --static', 'generate static file for markdown')
.usage('[port]')
.usage('[port 8080]')
.parse(process.argv);

if (program.versions) {
Expand All @@ -61,6 +62,7 @@ if (program.static) {
process.exit(0);
}


var handle = function() {
var port = parseInt(program.args[0] || 8080);

Expand All @@ -73,12 +75,29 @@ var handle = function() {

middleware(server);

server.listen(port, ipv4, function(e) {
var url = 'http://' + ipv4 + ':' + port;
var opener = platform === 'win32' ? 'start' : platform === 'linux' ? 'xdg-open' : 'open';
!program.normal && exec(opener + ' ' + url);
url = 'http://' + ipv4.yellow + ':' + port.blue;
logger.info('Running at '.red + url);
var detectPort = function(callback) {
var server = net.createServer();
server.listen(port, ipv4, function (err) {
server.once('close', function () {
callback(port)
});
server.close();
});
server.on('error', function (err) {
logger.warn(port + ' port is occupied');
port ++;
detectPort(callback);
});
}

detectPort(function(port) {
server.listen(port, ipv4, function(e) {
var url = 'http://' + ipv4 + ':' + port;
var opener = platform === 'win32' ? 'start' : platform === 'linux' ? 'xdg-open' : 'open';
!program.normal && exec(opener + ' ' + url);
url = 'http://'.red + ipv4.red + ':'.red + port.gray;
logger.info('Running at '.gray + url);
});
});
}

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "startserver",
"version": "0.5.22",
"version": "0.5.24",
"description": "A simple http server witch can be used like `python -m SimpleHTTPServer` and be more easy to generate a slider.",
"preferGlobal": true,
"bin": {
Expand Down

0 comments on commit 755bf9e

Please sign in to comment.