From: Takahiro Kambe Date: 2012-05-30T22:59:31+09:00 Subject: [ruby-dev:45693] Re: [ruby-trunk - Bug #4387][Feedback] test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する In message on Sun, 20 May 2012 07:58:51 +0900, "naruse (Yui NARUSE)" wrote: > [ruby-list:38139] にもスレがありますね。 > > まとめると、 > 1. connect_nonblock を呼ぶ > 2.1. ECONNREFUSED が返る (localhost など結果が瞬間的に返る場合) > 2.2.1. EINPROGRESS が返る > 2.2.2. select で待つ→成功か失敗に収束 > 2.2.3.1. EISCONN が返る (成功) > 2.2.3.2. EINVAL が返る (失敗) > って事のようです。 > ここで EINVAL が返るのはFreeBSD や NetBSD もそうです。 > Linux の場合、とりあえず手元で試した「localhost の開いていないポートに接続」というケースでは、 > ECONNABORTED が返ってきました。 ...(snip)... > これだけではアレなので、いくつか調査報告など > > w3cのhttpのサンプルコードだと、EINVALはEISCONNと同等の処理をするようになっています。 > http://www.w3.org/Library/src/HTTCP.c > > NetBSDのconnectにも昔EINVALを返す問題があったそうですが、どう対処したのかはよく分かりませんでした > http://mail-index.netbsd.org/netbsd-bugs/2003/08/18/0002.html > ↑ なんと報告者は Kambeさん これは、当時の ruby-list での議論を受けて報告したものですが、華麗に 無視されて今日に至っておりますな。 -- 神戸 隆博 / Takahiro Kambe