aboutsummaryrefslogtreecommitdiff
path: root/node_modules/timed-out/index.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-28 00:38:50 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-28 00:40:43 +0200
commit7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 (patch)
tree6de9a1aebd150a23b7f8c273ec657a5d0a18fe3e /node_modules/timed-out/index.js
parent963b7a41feb29cc4be090a2446bdfe0c1f1bcd81 (diff)
add linting (and some initial fixes)
Diffstat (limited to 'node_modules/timed-out/index.js')
-rw-r--r--node_modules/timed-out/index.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/node_modules/timed-out/index.js b/node_modules/timed-out/index.js
new file mode 100644
index 000000000..94007a4ae
--- /dev/null
+++ b/node_modules/timed-out/index.js
@@ -0,0 +1,55 @@
+'use strict';
+
+module.exports = function (req, time) {
+ if (req.timeoutTimer) {
+ return req;
+ }
+
+ var delays = isNaN(time) ? time : {socket: time, connect: time};
+ var host = req._headers ? (' to ' + req._headers.host) : '';
+
+ if (delays.connect !== undefined) {
+ req.timeoutTimer = setTimeout(function timeoutHandler() {
+ req.abort();
+ var e = new Error('Connection timed out on request' + host);
+ e.code = 'ETIMEDOUT';
+ req.emit('error', e);
+ }, delays.connect);
+ }
+
+ // Clear the connection timeout timer once a socket is assigned to the
+ // request and is connected.
+ req.on('socket', function assign(socket) {
+ // Socket may come from Agent pool and may be already connected.
+ if (!(socket.connecting || socket._connecting)) {
+ connect();
+ return;
+ }
+
+ socket.once('connect', connect);
+ });
+
+ function clear() {
+ if (req.timeoutTimer) {
+ clearTimeout(req.timeoutTimer);
+ req.timeoutTimer = null;
+ }
+ }
+
+ function connect() {
+ clear();
+
+ if (delays.socket !== undefined) {
+ // Abort the request if there is no activity on the socket for more
+ // than `delays.socket` milliseconds.
+ req.setTimeout(delays.socket, function socketTimeoutHandler() {
+ req.abort();
+ var e = new Error('Socket timed out on request' + host);
+ e.code = 'ESOCKETTIMEDOUT';
+ req.emit('error', e);
+ });
+ }
+ }
+
+ return req.on('error', clear);
+};