Forum: Ruby-dev [ruby-trunk - Bug #4387] test socket connect nonblock(TestSocketAddrinfo) がまれに失敗する

C4e88907313843cf07f6d85ba8162120?d=identicon&s=25 ko1 (Koichi Sasada) (Guest)
on 2012-10-27 02:29
(Received via mailing list)
Issue #4387 has been updated by ko1 (Koichi Sasada).

Assignee set to naruse (Yui NARUSE)

誰に押しつけたモノだか迷ったのですが,とりあえず詳しそうななるせさんに振りました.
これ,どうするべきでしょうか.
----------------------------------------
Bug #4387: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
https://bugs.ruby-lang.org/issues/4387#change-31730

Author: kosaki (Motohiro KOSAKI)
Status: Feedback
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3dev (2011-02-09 trunk 30831) [i386-mswin32_100]


=begin
 1割ぐらいの確率でtest-allが以下のエラーを吐きます

  57) Error:
 test_socket_connect_nonblock(TestSocketAddrinfo):
 Errno::EINVAL: Invalid argument - connect(2)
     C:/ruby/trunk/test/socket/test_addrinfo.rb:163:in
`connect_nonblock'
     C:/ruby/trunk/test/socket/test_addrinfo.rb:163:in `rescue in
test_socket_con
 nect_nonblock'
     C:/ruby/trunk/test/socket/test_addrinfo.rb:158:in
`test_socket_connect_nonbl
 ock'


 なお、OSレベルでは WSAGetLastError() が WSAEINVALを返しています。

 MSDNからそれっぽい部分をいくつかピックアップすると
 http://msdn.microsoft.com/en-us/library/ms737625(v...

 WSAEALREADY: A nonblocking connect call is in progress on the specified
socket.
              Note  In order to preserve backward compatibility, this
error is reported as
              WSAEINVAL to Windows Sockets 1.1 applications that link to
either Winsock.dll or
              Wsock32.dll.
 WSAEINVAL: The parameter s is a listening socket.

 とあるので、
  o selectが正しく動いておらず、connect完了する前に処理がもどってしまうので、connectがEINVALを返している
  o selectはちゃんと動いているけど、connectがトチ狂ってEISCONNを返さずにEINVALを返している

 の2択なんですが、どちらなのかは切り分けできませんでした。誰か良い案があれば教えてください。


 これだけではアレなので、いくつか調査報告など

 w3cのhttpのサンプルコードだと、EINVALはEISCONNと同等の処理をするようになっています。
 http://www.w3.org/Library/src/HTTCP.c

 NetBSDのconnectにも昔EINVALを返す問題があったそうですが、どう対処したのかはよく分かりませんでした
 http://mail-index.netbsd.org/netbsd-bugs/2003/08/1...
 ↑ なんと報告者は Kambeさん

 ruby-talkでそれっぽい話をしているログをみつけたのですが、こちらも結論分からず。
 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...
=end
This topic is locked and can not be replied to.