| 382 | 382 | return undefined; |
| 383 | 383 | } |
| 384 | 384 | |
| 385 | + |
| 386 | +function canResolve(name, useIPv6 = true, useIPv4 = true) { |
| 387 | + return new Promise((resolve, reject) => { |
| 388 | + let v6Resolve |
| 389 | + let v4Resolve |
| 390 | + |
| 391 | + if (useIPv6) { |
| 392 | + dns.resolve6(name, (err) => { |
| 393 | + if (err) { |
| 394 | + v6Resolve = false |
| 395 | + } else { |
| 396 | + v6Resolve = true |
| 397 | + } |
| 398 | + }); |
| 399 | + |
| 400 | + } else { |
| 401 | + v6Resolve = false |
| 402 | + } |
| 403 | + |
| 404 | + if (useIPv4) { |
| 405 | + dns.resolve(name, (err) => { |
| 406 | + if (err) { |
| 407 | + v4Resolve = false |
| 408 | + } else { |
| 409 | + v4Resolve = true |
| 410 | + } |
| 411 | + }); |
| 412 | + |
| 413 | + } else { |
| 414 | + v4Resolve = false |
| 415 | + } |
| 416 | + |
| 417 | + if (v6Resolve || v4Resolve) { |
| 418 | + resolve |
| 419 | + } else { |
| 420 | + reject |
| 421 | + } |
| 422 | + }); |
| 423 | +} |
| 424 | + |
| 385 | 425 | async function getHasIP() { |
| 386 | 426 | let hasIPv6 = false; |
| 387 | 427 | let hasIPv6Local = false; |