https://bugs.ruby-lang.org/https://bugs.ruby-lang.org/favicon.ico?17113305112021-01-12T04:57:25ZRuby Issue Tracking SystemRuby master - Feature #17528: Make Addrinfo.getaddrinfo fall back to Timeout.timeout for :resolv_timeouthttps://bugs.ruby-lang.org/issues/17528?journal_id=898632021-01-12T04:57:25Zakr (Akira Tanaka)akr@fsij.org
<ul></ul><p>I think Timeout.timeout doesn't work for Addrinfo.getaddrinfo<br>
because Timeout.timeout cannot interrupt getaddrinfo function in C.</p> Ruby master - Feature #17528: Make Addrinfo.getaddrinfo fall back to Timeout.timeout for :resolv_timeouthttps://bugs.ruby-lang.org/issues/17528?journal_id=899242021-01-13T16:05:11Zmohamedhafez (Mohamed Hafez)
<ul></ul><p>According to <a href="https://bugs.ruby-lang.org/issues/12435" class="external">https://bugs.ruby-lang.org/issues/12435</a>, the only reason we are using <code>Timeout.timeout</code> in <code>Net::HTTP#connect</code> instead of using nonblocking io and <code>IO.select</code> is so that we can place a timeout on the getaddrinfo function, <a class="user active user-mention" href="https://bugs.ruby-lang.org/users/724">@normalperson (Eric Wong)</a> can you clarify here?</p> Ruby master - Feature #17528: Make Addrinfo.getaddrinfo fall back to Timeout.timeout for :resolv_timeouthttps://bugs.ruby-lang.org/issues/17528?journal_id=899302021-01-13T17:50:11Zakr (Akira Tanaka)akr@fsij.org
<ul></ul><p>How to test:</p>
<pre><code>% vi /etc/resolv.conf # specify non-existing nameserver
% time ./ruby -rtimeout -rsocket -e 'Timeout.timeout(2) { Addrinfo.getaddrinfo("www.ruby-lang.org",nil) }'
-e:1:in `getaddrinfo': execution expired (Timeout::Error)
from -e:1:in `block in <main>'
from /home/akr/o0/lib/ruby/3.1.0/timeout.rb:112:in `timeout'
from -e:1:in `<main>'
./ruby -rtimeout -rsocket -e 0.14s user 0.00s system 0% cpu 20.136 total
</code></pre>
<p>This needs 20 second instead of 2 second.</p> Ruby master - Feature #17528: Make Addrinfo.getaddrinfo fall back to Timeout.timeout for :resolv_timeouthttps://bugs.ruby-lang.org/issues/17528?journal_id=899322021-01-13T20:50:24Zmohamedhafez (Mohamed Hafez)
<ul></ul><p>I was just doing a similar test actually, I think you're correct! I'll close this issue and re-submit a patch to Net::HTTP to replace <code>Timeout::timeout</code> there, since it's not doing anything for DNS lookups anyway. Thank you!</p> Ruby master - Feature #17528: Make Addrinfo.getaddrinfo fall back to Timeout.timeout for :resolv_timeouthttps://bugs.ruby-lang.org/issues/17528?journal_id=1001022022-11-15T10:48:26Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<ul><li><strong>Related to</strong> <i><a class="issue tracker-2 status-1 priority-4 priority-default" href="/issues/17525">Feature #17525</a>: Implement Happy Eyeballs Version 2 (RFC8305) in Socket.tcp</i> added</li></ul>