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); + } + }; +}