https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2011-02-10T04:57:46Z
Ruby Issue Tracking System
Ruby master - Bug #4387: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
https://redmine.ruby-lang.org/issues/4387?journal_id=15752
2011-02-10T04:57:46Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><p>=begin<br>
不思議なことに以下の2つはほぼ同等の処理をしているにも関わらず、test_connect_nonblockは失敗しません</p>
<p>test_nonblock.rb: test_connect_nonblock()<br>
test_addrinfo.rb: test_socket_connect_nonblock()<br>
=end</p>
Ruby master - Bug #4387: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
https://redmine.ruby-lang.org/issues/4387?journal_id=15753
2011-02-10T05:39:51Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><p>=begin<br>
WSAConnect()はWSAEALREADYを返すべきタイミングでWSAEINVALを返すことはなさそうだったので、単純にconnectをWSAConnect()に置換してみたのですが、やっぱりWSAEINVALが帰ってきますねぇ。おてあげ</p>
<p>=end</p>
Ruby master - Bug #4387: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
https://redmine.ruby-lang.org/issues/4387?journal_id=15760
2011-02-10T09:24:40Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul></ul><p>=begin<br>
これも見たことないですねえ。1割も確率があるなら私も踏んでよさそうなんですが。<br>
Winsockの(あるいはOSの)バージョンによってはなんかタイミングバグがあるとかかしら。</p>
<p>ところで、ふと思ったんですけど、ウィルス対策ソフトとか何か入ってますか?<br>
=end</p>
Ruby master - Bug #4387: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
https://redmine.ruby-lang.org/issues/4387?journal_id=15772
2011-02-10T22:58:41Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><p>=begin<br>
Security Essentialをいったん外して実験してみました。再現率が有為に下がったのですが、まだ100回に一回ぐらい同様の現象が起きます。<br>
確率が変わるのはSecurity Essentialが挙動を変えてるんじゃなく、localhostでのテストだからタイミングがちょっと変わっただけで挙動が変わってしまうというオチではないかと予想しています。<br>
うーむ、Vistaが腐っていると思うべきなのだろうか。<br>
=end</p>
Ruby master - Bug #4387: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
https://redmine.ruby-lang.org/issues/4387?journal_id=16749
2011-05-03T21:50:04Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Rejected</i></li></ul><p>進展する気がしないので、いったんrejectしますね。</p>
Ruby master - Bug #4387: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
https://redmine.ruby-lang.org/issues/4387?journal_id=26722
2012-05-20T07:58:50Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Status</strong> changed from <i>Rejected</i> to <i>Feedback</i></li></ul><p>[ruby-list:38139] にもスレがありますね。</p>
<p>まとめると、</p>
<ol>
<li>connect_nonblock を呼ぶ<br>
2.1. ECONNREFUSED が返る (localhost など結果が瞬間的に返る場合)<br>
2.2.1. EINPROGRESS が返る<br>
2.2.2. select で待つ→成功か失敗に収束<br>
2.2.3.1. EISCONN が返る (成功)<br>
2.2.3.2. EINVAL が返る (失敗)<br>
って事のようです。<br>
ここで EINVAL が返るのはFreeBSD や NetBSD もそうです。<br>
Linux の場合、とりあえず手元で試した「localhost の開いていないポートに接続」というケースでは、<br>
ECONNABORTED が返ってきました。</li>
</ol>
<p>さて、ここでの悩みどころは改めて connect_nonblock して EINVAL が返ってきてしまうと、<br>
もはや失敗した理由はわからなくなってしまう事です。<br>
これは、例えば以下のように connect_nonblock の前に getsockopt すれば理由がわかります。<br>
diff --git a/test/socket/test_addrinfo.rb b/test/socket/test_addrinfo.rb<br>
index 3240b9d..1e047c9 100644<br>
--- a/test/socket/test_addrinfo.rb<br>
+++ b/test/socket/test_addrinfo.rb<br>
@@ -159,6 +159,8 @@ class TestSocketAddrinfo < Test::Unit::TestCase<br>
s2.connect_nonblock(ai)<br>
rescue IO::WaitWritable<br>
IO.select(nil, [s2])</p>
<ul>
<li>
<pre><code> r = s2.getsockopt(Socket::SOL_SOCKET, Socket::SO_ERROR)
</code></pre>
</li>
<li>
<pre><code> assert_equal(0, r.int, "NOERROR is expected but #{r.inspect}")
begin
s2.connect_nonblock(ai)
rescue Errno::EISCONN
</code></pre>
</li>
</ul>
Ruby master - Bug #4387: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
https://redmine.ruby-lang.org/issues/4387?journal_id=31730
2012-10-27T09:28:41Z
ko1 (Koichi Sasada)
<ul><li><strong>Assignee</strong> set to <i>naruse (Yui NARUSE)</i></li></ul><p>誰に押しつけたモノだか迷ったのですが,とりあえず詳しそうななるせさんに振りました.<br>
これ,どうするべきでしょうか.</p>
Ruby master - Bug #4387: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
https://redmine.ruby-lang.org/issues/4387?journal_id=31968
2012-10-30T09:40:59Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Status</strong> changed from <i>Feedback</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>This issue was solved with changeset r37387.<br>
Motohiro, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<hr>
<p>Check if there is no error before reconnect [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する (Closed)" href="https://redmine.ruby-lang.org/issues/4387">#4387</a>]</p>