Skip to content

Commit fe2ac4a

Browse files
committed
cleanup peers that never get an answer
attempt to fix webtorrent/webtorrent#502
1 parent e6382c9 commit fe2ac4a

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

lib/client/websocket-tracker.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ var socketPool = {}
1818

1919
var RECONNECT_VARIANCE = 30 * 1000
2020
var RECONNECT_MINIMUM = 5 * 1000
21+
var OFFER_TIMEOUT = 60000
2122

2223
inherits(WebSocketTracker, Tracker)
2324

@@ -199,11 +200,15 @@ WebSocketTracker.prototype._onSocketData = function (data) {
199200
}
200201

201202
if (data.answer && data.peer_id) {
202-
peer = self.peers[common.binaryToHex(data.offer_id)]
203+
var offerId = common.binaryToHex(data.offer_id)
204+
peer = self.peers[offerId]
203205
if (peer) {
204206
peer.id = common.binaryToHex(data.peer_id)
205207
peer.signal(data.answer)
206208
self.client.emit('peer', peer)
209+
210+
clearTimeout(peer.trackerTimeout)
211+
self.peers[offerId] = null
207212
} else {
208213
debug('got unexpected answer: ' + JSON.stringify(data.answer))
209214
}
@@ -253,7 +258,6 @@ WebSocketTracker.prototype._generateOffers = function (numwant, cb) {
253258
var offers = []
254259
debug('generating %s offers', numwant)
255260

256-
// TODO: cleanup dead peers and peers that never get a return offer, from self.peers
257261
for (var i = 0; i < numwant; ++i) {
258262
generateOffer()
259263
}
@@ -274,6 +278,10 @@ WebSocketTracker.prototype._generateOffers = function (numwant, cb) {
274278
})
275279
checkDone()
276280
})
281+
peer.trackerTimeout = setTimeout(function () {
282+
peer.destroy()
283+
self.peers[offerId] = null
284+
}, OFFER_TIMEOUT)
277285
}
278286

279287
function checkDone () {

0 commit comments

Comments
 (0)