Incorrect Resolv result when DNS server is unreachable
The Resolv class has an incorrect behavior when the DNS server can't be reached.
The attached script highlight the issue which - depending on your needs in resolving host names - could be really problematic.
Here's the output of the script:
$ ruby test_resolv.rb Resolution of an existing domain name -> OK ["184.108.40.206", "2a00:1450:4002:806::2004"] Resolution of a non existing domain name -> OK  Attempt of resolving a domain name with an incorrect/unreachable DNS server -> KO  -> Expecting: ResolvError
Obviously the result for both NXDOMAIN and failure to reach the DNS server is identical, hence it make impossible to handle errors programmatically.
A proper result when the DNS server is not reachable would be to get a ResolvError exception fired.
Updated by jeremyevans0 (Jeremy Evans) 8 months ago
- Backport deleted (
2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN)
- ruby -v deleted (
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux])
- Tracker changed from Bug to Feature
The current behavior seems to be expected (the code explicitly rescues the internal ResolvError), so I would consider this a feature request and not a bug. I agree with you that it would be nice to be able to differentiate the cases. I've submitted a pull request to resolv to support a :raise_timeout_error option that allows for the behavior you want: https://github.com/ruby/resolv/pull/14