diff --git a/lib/peer.js b/lib/peer.js index 31539ac..716a1ce 100644 --- a/lib/peer.js +++ b/lib/peer.js @@ -170,7 +170,9 @@ Peer.prototype._addSocketEventHandlers = function() { Peer.prototype._onError = function(e) { this.emit('error', e); - this.disconnect(); + if (this.status !== Peer.STATUS.DISCONNECTED) { + this.disconnect(); + } }; /** diff --git a/test/peer.js b/test/peer.js index b8c75c9..a536d2d 100644 --- a/test/peer.js +++ b/test/peer.js @@ -151,6 +151,26 @@ describe('Peer', function() { peer.socket.emit('error', error); }); + it('will not disconnect twice on disconnect and error', function(done) { + var peer = new Peer({host: 'localhost'}); + var socket = new EventEmitter(); + socket.connect = sinon.stub(); + socket.destroy = sinon.stub(); + peer._getSocket = function() { + return socket; + }; + peer.on('error', sinon.stub()); + peer.connect(); + var called = 0; + peer.on('disconnect', function() { + called++; + called.should.not.be.above(1); + done(); + }); + peer.disconnect(); + peer.socket.emit('error', new Error('fake error')); + }); + it('disconnect with max buffer length', function(done) { var peer = new Peer({host: 'localhost'}); var socket = new EventEmitter();