Skip to content

Commit 01286e2

Browse files
committed
listen() without port picks random port
1 parent 9b2a8ea commit 01286e2

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@
2525
"inherits": "^2.0.1",
2626
"ip": "^0.3.0",
2727
"once": "^1.3.0",
28+
"portfinder": "^0.2.1",
2829
"string2compact": "^1.1.1"
2930
},
3031
"devDependencies": {
3132
"magnet-uri": "^2.0.1",
3233
"parse-torrent": "^1.1.0",
33-
"portfinder": "^0.2.1",
3434
"tape": "^2.13.3"
3535
},
3636
"homepage": "http://webtorrent.io",

server.js

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@ var EventEmitter = require('events').EventEmitter
99
var http = require('http')
1010
var inherits = require('inherits')
1111
var ipLib = require('ip')
12+
var portfinder = require('portfinder')
1213
var string2compact = require('string2compact')
1314

15+
// Use random port above 1024
16+
portfinder.basePort = Math.floor(Math.random() * 60000) + 1025
17+
1418
var NUM_ANNOUNCE_PEERS = 50
1519
var MAX_ANNOUNCE_PEERS = 82
1620
var REMOVE_IPV6_RE = /^::ffff:/
@@ -43,6 +47,7 @@ function Server (opts) {
4347

4448
self._trustProxy = !!opts.trustProxy
4549

50+
self.listening = false
4651
self.port = null
4752
self.torrents = {}
4853

@@ -65,7 +70,10 @@ function Server (opts) {
6570
var num = !!self._httpServer + !!self._udpServer
6671
function onListening () {
6772
num -= 1
68-
if (num === 0) self.emit('listening', self.port)
73+
if (num === 0) {
74+
self.listening = true
75+
self.emit('listening', self.port)
76+
}
6977
}
7078
}
7179

@@ -76,10 +84,22 @@ Server.prototype._onError = function (err) {
7684

7785
Server.prototype.listen = function (port, onlistening) {
7886
var self = this
79-
self.port = port
87+
if (typeof port === 'function') {
88+
onlistening = port
89+
port = undefined
90+
}
91+
if (self.listening) throw new Error('server already listening')
8092
if (onlistening) self.once('listening', onlistening)
81-
self._httpServer && self._httpServer.listen(port.http || port)
82-
self._udpServer && self._udpServer.bind(port.udp || port)
93+
94+
function onPort (err, port) {
95+
if (err) return self.emit('error', err)
96+
self.port = port
97+
self._httpServer && self._httpServer.listen(port.http || port)
98+
self._udpServer && self._udpServer.bind(port.udp || port)
99+
}
100+
101+
if (port) onPort(null, port)
102+
else portfinder.getPort(onPort)
83103
}
84104

85105
Server.prototype.close = function (cb) {

test/server.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
var Client = require('../')
2-
var portfinder = require('portfinder')
32
var Server = require('../').Server
43
var test = require('tape')
54

@@ -9,7 +8,7 @@ var peerId2 = '12345678901234567890'
98
var torrentLength = 50000
109

1110
function serverTest (t, serverType) {
12-
t.plan(27)
11+
t.plan(26)
1312

1413
var opts = serverType === 'http' ? { udp: false } : { http: false }
1514
var server = new Server(opts)
@@ -26,10 +25,7 @@ function serverTest (t, serverType) {
2625
t.pass('server listening')
2726
})
2827

29-
portfinder.getPort(function (err, port) {
30-
t.error(err, 'found free port')
31-
server.listen(port)
32-
28+
server.listen(function (port) {
3329
var announceUrl = 'http://127.0.0.1:' + port + '/announce'
3430

3531
var client = new Client(peerId, 6881, {

0 commit comments

Comments
 (0)