From 414cbfdc5df3c857af15aefd496a87aafabbc60b Mon Sep 17 00:00:00 2001 From: Calvin Montgomery Date: Tue, 6 Jan 2015 10:54:14 -0500 Subject: [PATCH] Add more safeguards for socket errors --- lib/get-info.js | 24 ++++++++++++++---------- lib/io/ioserver.js | 10 +++++++++- lib/server.js | 14 ++++++++++++++ 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/lib/get-info.js b/lib/get-info.js index e016fe2c..186809be 100644 --- a/lib/get-info.js +++ b/lib/get-info.js @@ -34,6 +34,12 @@ const CONTENT_TYPES = { var urlRetrieve = function (transport, options, callback) { var req = transport.request(options, function (res) { + res.on("error", function (err) { + Logger.errlog.log("HTTP response " + options.host + options.path + " failed: "+ + err); + callback(503, ""); + }); + var buffer = ""; res.setEncoding("utf-8"); res.on("data", function (chunk) { @@ -979,17 +985,15 @@ function vimeoWorkaround(id, cb) { } }; - http.get(options, function (res) { - res.setEncoding("utf-8"); - var buffer = ""; + urlRetrieve(http, options, function (status, buffer) { + if (status !== 200) { + setImmediate(function () { + cb({}); + }); + return; + } - res.on("data", function (data) { - buffer += data; - }); - - res.on("end", function () { - parse(buffer); - }); + parse(buffer); }); }; diff --git a/lib/io/ioserver.js b/lib/io/ioserver.js index 8d4308d7..4108a830 100644 --- a/lib/io/ioserver.js +++ b/lib/io/ioserver.js @@ -217,7 +217,15 @@ module.exports = { if (id in srv.servers) { io.attach(srv.servers[id]); } else { - io.attach(require("http").createServer().listen(bind.port, bind.ip)); + var server = require("http").createServer().listen(bind.port, bind.ip); + server.on("clientError", function (err, socket) { + Logger.errlog.log("clientError on " + id + " - " + err); + try { + socket.destroy(); + } catch (e) { + } + }); + io.attach(server); } bound[id] = null; diff --git a/lib/server.js b/lib/server.js index cca14e9b..85016ceb 100644 --- a/lib/server.js +++ b/lib/server.js @@ -85,8 +85,22 @@ var Server = function () { if (bind.https && Config.get("https.enabled")) { self.servers[id] = https.createServer(opts, self.express) .listen(bind.port, bind.ip); + self.servers[id].on("clientError", function (err, socket) { + Logger.errlog.log("clientError on " + id + " - " + err); + try { + socket.destroy(); + } catch (e) { + } + }); } else if (bind.http) { self.servers[id] = self.express.listen(bind.port, bind.ip); + self.servers[id].on("clientError", function (err, socket) { + Logger.errlog.log("clientError on " + id + " - " + err); + try { + socket.destroy(); + } catch (e) { + } + }); } });