retry ping domain with ipv6, if domain is not found
This commit is contained in:
		
							parent
							
								
									2a4695a774
								
							
						
					
					
						commit
						4d4d504d6e
					
				
					 2 changed files with 23 additions and 8 deletions
				
			
		|  | @ -30,7 +30,7 @@ function Ping(host, options) { | ||||||
| 
 | 
 | ||||||
|         const defaultArgs = [ "-n", "-w", "2", "-c", "1", host ]; |         const defaultArgs = [ "-n", "-w", "2", "-c", "1", host ]; | ||||||
| 
 | 
 | ||||||
|         if (net.isIPv6(host)) { |         if (net.isIPv6(host) || options.ipv6) { | ||||||
|             defaultArgs.unshift("-6"); |             defaultArgs.unshift("-6"); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -115,7 +115,7 @@ Ping.prototype.send = function(callback) { | ||||||
|         ms = stdout.match(self._regmatch); // parse out the ##ms response
 |         ms = stdout.match(self._regmatch); // parse out the ##ms response
 | ||||||
|         ms = (ms && ms[1]) ? Number(ms[1]) : ms; |         ms = (ms && ms[1]) ? Number(ms[1]) : ms; | ||||||
| 
 | 
 | ||||||
|         callback(null, ms); |         callback(null, ms, stdout); | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -45,15 +45,30 @@ exports.tcping = function (hostname, port) { | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| exports.ping = function (hostname) { | exports.ping = async (hostname) => { | ||||||
|     return new Promise((resolve, reject) => { |     try { | ||||||
|         const ping = new Ping(hostname); |         await exports.pingAsync(hostname); | ||||||
|  |     } catch (e) { | ||||||
|  |         // If the host cannot be resolved, try again with ipv6
 | ||||||
|  |         if (e.message.includes("service not known")) { | ||||||
|  |             await exports.pingAsync(hostname, true); | ||||||
|  |         } else { | ||||||
|  |             throw e; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|         ping.send(function (err, ms) { | exports.pingAsync = function (hostname, ipv6 = false) { | ||||||
|  |     return new Promise((resolve, reject) => { | ||||||
|  |         const ping = new Ping(hostname, { | ||||||
|  |             ipv6 | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         ping.send(function (err, ms, stdout) { | ||||||
|             if (err) { |             if (err) { | ||||||
|                 reject(err) |                 reject(err); | ||||||
|             } else if (ms === null) { |             } else if (ms === null) { | ||||||
|                 reject(new Error("timeout")) |                 reject(new Error(stdout)) | ||||||
|             } else { |             } else { | ||||||
|                 resolve(Math.round(ms)) |                 resolve(Math.round(ms)) | ||||||
|             } |             } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue