diff --git a/bin/cmd.js b/bin/cmd.js index 1e393009..c342be33 100755 --- a/bin/cmd.js +++ b/bin/cmd.js @@ -310,10 +310,23 @@ function runDownload (torrentId) { // Start http server server = torrent.createServer() - server.listen(argv.port, function () { + + function initServer () { if (torrent.ready) onReady() else torrent.once('ready', onReady) - }) + } + + server.listen(argv.port, initServer) + + .on('error', function (err) { + // In case the port is unusable + if (err.code === 'EADDRINUSE' || err.code === 'EACCES') { + // Let the OS choose one for us + server.listen(0, initServer) + } + else throw err + }) + server.once('connection', function () { serving = true }) @@ -366,8 +379,8 @@ function runDownload (torrentId) { function onSelection (index) { href = (argv.airplay || argv.chromecast || argv.xbmc) - ? 'http://' + networkAddress() + ':' + argv.port + '/' + index - : 'http://localhost:' + argv.port + '/' + index + ? 'http://' + networkAddress() + ':' + server.address().port + '/' + index + : 'http://localhost:' + server.address().port + '/' + index if (playerName) torrent.files[index].select() if (argv.stdout) torrent.files[index].createReadStream().pipe(process.stdout) diff --git a/test/cmd.js b/test/cmd.js index ee8a87b9..5699a0e6 100644 --- a/test/cmd.js +++ b/test/cmd.js @@ -99,6 +99,15 @@ test('Command line: webtorrent create /path/to/file', function (t) { }) }) +test('Command line: webtorrent download --port 80', function (t) { + t.plan(2) + + cp.exec(CMD + ' --port 80 --out test/content download test/torrents/leaves.torrent', function (err, data) { + t.error(err) + t.ok(data.indexOf('successfully') !== -1) + }) +}) + // TODO: test 'webtorrent download /path/to/torrent' // TODO: test 'webtorrent download magnet_uri' // TODO: test 'webtorrent seed /path/to/file'