From 391ce0dc8b88a6609d88db83ea064040a05ab803 Mon Sep 17 00:00:00 2001 From: Guillermo Rauch Date: Mon, 28 Dec 2015 16:07:42 -0300 Subject: [PATCH] server: catch websocket errors before upgrade --- lib/server.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/server.js b/lib/server.js index c8ff324f..ce142713 100644 --- a/lib/server.js +++ b/lib/server.js @@ -343,6 +343,8 @@ Server.prototype.handleUpgrade = function(req, socket, upgradeHead){ */ Server.prototype.onWebSocket = function(req, socket){ + socket.on('error', onUpgradeError); + if (!transports[req._query.transport].prototype.handlesUpgrades) { debug('transport doesnt handle upgraded requests'); socket.close(); @@ -368,6 +370,10 @@ Server.prototype.onWebSocket = function(req, socket){ socket.close(); } else { debug('upgrading existing transport'); + + // transport error handling takes over + socket.removeListener('error', onUpgradeError); + var transport = new transports[req._query.transport](req); if (req._query && req._query.b64) { transport.supportsBinary = false; @@ -378,8 +384,16 @@ Server.prototype.onWebSocket = function(req, socket){ client.maybeUpgrade(transport); } } else { + // transport error handling takes over + socket.removeListener('error', onUpgradeError); + this.handshake(req._query.transport, req); } + + function onUpgradeError(){ + debug('websocket error before upgrade'); + // socket.close() not needed + } }; /**