From 1721eed41300f2ddd56aeca02960a6e0bf566fa8 Mon Sep 17 00:00:00 2001 From: Feross Aboukhadijeh Date: Thu, 27 Mar 2014 21:29:23 -0700 Subject: [PATCH] udp client: unify error handling --- index.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/index.js b/index.js index 388a0d9..d1bad34 100644 --- a/index.js +++ b/index.js @@ -147,31 +147,37 @@ Client.prototype._requestUdp = function (announceUrl, opts) { var transactionId = new Buffer(hat(32), 'hex') var timeout = setTimeout(function () { + error('tracker request timed out') + }, 15000) + + function error (message) { + self.emit('error', new Error(message)) socket.close() - }, 5000) + clearTimeout(timeout) + } socket.on('error', function (err) { - self.emit('error', err) + error(err) }) socket.on('message', function (message, rinfo) { if (message.length < 8 || message.readUInt32BE(4) !== transactionId.readUInt32BE(0)) { - return self.emit('error', new Error('tracker sent back invalid transaction id')) + return error(new Error('tracker sent back invalid transaction id')) } var action = message.readUInt32BE(0) switch (action) { case 0: if (message.length < 16) { - return self.emit('error', new Error('invalid udp handshake')) + return error(new Error('invalid udp handshake')) } announce(message.slice(8, 16), opts) return case 1: if (message.length < 20) { - return self.emit('error', new Error('invalid announce message')) + return error(new Error('invalid announce message')) } // TODO: this should be stored per tracker, not globally for all trackers