From 647b6909c6d527eb82f6d789c88a23b2f8a60126 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 7 Jul 2017 01:20:38 -0700 Subject: [PATCH] dns: add custom timeout. --- lib/net/dns.js | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/net/dns.js b/lib/net/dns.js index eceecd41..b6a8f64a 100644 --- a/lib/net/dns.js +++ b/lib/net/dns.js @@ -31,7 +31,7 @@ exports.resolve = function resolve(host, proxy) { return socks.resolve(proxy, host); return new Promise((resolve, reject) => { - dns.resolve(host, 'A', (err, result) => { + dns.resolve(host, 'A', to((err, result) => { if (err) { reject(err); return; @@ -43,7 +43,7 @@ exports.resolve = function resolve(host, proxy) { } resolve(result); - }); + })); }); }; @@ -61,7 +61,7 @@ exports.lookup = function lookup(host, proxy) { return new Promise((resolve, reject) => { let addrs = []; - dns.lookup(host, options, (err, result) => { + dns.lookup(host, options, to((err, result) => { if (err) { reject(err); return; @@ -76,6 +76,24 @@ exports.lookup = function lookup(host, proxy) { addrs.push(addr.address); resolve(addrs); - }); + })); }); }; + +/* + * Helpers + */ + +function to(callback) { + let timeout = setTimeout(() => { + callback(new Error('DNS request timed out.')); + callback = null; + }, 5000); + + return function(err, result) { + if (callback) { + clearTimeout(timeout); + callback(err, result); + } + }; +}