Project

General

Profile

Actions

Bug #21506

open

Fix timeout in `Addrinfo.getaddrinfo` to actually take effect

Added by shioimm (Misaki Shioi) about 4 hours ago.

Status:
Open
Target version:
-
[ruby-core:122698]

Description

Description

This change fixes an issue where the timeout option in Addrinfo.getaddrinfo was not functioning as expected.
https://github.com/ruby/ruby/pull/13803/files

It also addresses a related issue where specifying fast_fallback: false with resolv_timeout for Socket.tcp andTCPSocket.new would have no effect.

Background

The timeout option was originally introduced in:
https://github.com/ruby/ruby/commit/6382f5cc91ac9e36776bc854632d9a1237250da7

However, the value was noy used in current implementation:
https://github.com/ruby/ruby/blob/3f0e0d5c8bf9046aee7f262a3f9a7524d51aaf3e/ext/socket/raddrinfo.c#L1285

Therefore, even if a timeout is specified and the duration elapses during name resolution, nothing happens. This is clearly not the intended behavior.

What this change does

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.

Notes

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:
https://github.com/ruby/ruby/commit/6382f5cc91ac9e36776bc854632d9a1237250da7
https://github.com/ruby/ruby/commit/511fe23fa2bdf1f17faa91e0558be47b5bb62b2a

The reason is that with fast_fallback: false, these methods internally call the same rsock_getaddrinfo() as Addrinfo.getaddrinfo.
This change addresses that as well.

No data to display

Actions

Also available in: Atom PDF

Like0