Project

General

Profile

Bug #12604

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

`Win32::Resolv.get_resolv_info` Win32::Resolv.get_resolv_info returns a list of IP address that include DNS server for network devices that are not connected, causing long timeouts when using `Resolv::DNS` Resolv::DNS (or Rubygems which uses `Resolv::DNS`) Resolv::DNS) 

 `Win32::Resolv` Win32::Resolv scans the registry for DNS server addresses. Unfortunatly, if some of your network devices are not currently connected, the old DNS information is still stored in registry. So `get_resolv_info` get_resolv_info still returns it. This can cause very long timeouts when using `Resolv::DNS` Resolv::DNS (e.g. rubygems). For example, a simple 'gem install' on my machine would take over a minute, because of several timeouts waiting for DNS. 

 Example: 

 ```ruby <pre> 
 irb(main):024:0> Win32::Resolv.get_resolv_info 
 => [["mynet", "mycompany.local", "local"], ["192.168.1.1", "172.27.0.1", "8.8.8.8", "8.8.4.4", "192.168.101.10", "192.168.101.11"]] 
 ``` </pre> 

 * 192.168.1.1 is the DNS server from my home Wifi (not currently connected) 
 * 172.27.0.1 is the DNS server from a router I had connected via an USB Ethernet Device a week ago 
 * 8.8.8.8 is from the same as above (but incidentally works, since it is available) 
 * 192.168.101.10+11 are the actual current DNS server 

 I think a solution could be to rely on `GetAdapterAddresses()` GetAdapterAddresses() in the Win32 API instead to get the IP address of DNS server. 

 As a workaround for users affected by this is to remove unconnected Interfaces from `HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces` HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces in the registry. 

Back