mirror of
https://github.com/ruby/ruby.git
synced 2026-01-27 04:24:23 +00:00
[Bug #21506] Fix timeout in Addrinfo.getaddrinfo to actually take effect This change fixes an issue where the timeout option in `Addrinfo.getaddrinfo` was not functioning as expected. It also addresses a related issue where specifying `fast_fallback: false` with `resolv_timeout` for `Socket.tcp` and`TCPSocket.new` would have no effect. The timeout option was originally introduced in:6382f5cc91However, the value was noy used in current implementation:3f0e0d5c8b/ext/socket/raddrinfo.c (L1282-1308)Therefore, even if a timeout is specified and the duration elapses during name resolution, nothing happens. This is clearly not the intended behavior. `Addrinfo.getaddrinfo` has been made interruptible as of Feature #19965. This change uses that feature to interrupt name resolution when the specified timeout period elapses, raising a user-specified timeout error. The timeout can be specified in milliseconds. The same issue affects `Socket.tcp` and `TCPSocket.new` when `resolv_timeout` is set along with `fast_fallback: false`. `resolv_timeout` was introduced in the following commits:6382f5cc91511fe23fa2The reason is that with `fast_fallback: false`, these methods internally call the same `rsock_getaddrinfo()` as `Addrinfo.getaddrinfo`. This change addresses that as well.