server: catch websocket errors before upgrade

This commit is contained in:
Guillermo Rauch
2015-12-28 16:07:42 -03:00
parent 7f83f59652
commit 391ce0dc8b

View File

@@ -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
}
};
/**