Bug #4387
closedtest_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
Description
=begin
1割ぐらいの確率でtest-allが以下のエラーを吐きます
- Error:
test_socket_connect_nonblock(TestSocketAddrinfo):
Errno::EINVAL: Invalid argument - connect(2)
C:/ruby/trunk/test/socket/test_addrinfo.rb:163:inconnect_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=vs.85).aspx
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/18/0002.html
↑ なんと報告者は Kambeさん
ruby-talkでそれっぽい話をしているログをみつけたのですが、こちらも結論分からず。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/16632
=end
Updated by kosaki (Motohiro KOSAKI) almost 14 years ago
- Status changed from Open to Rejected
Updated by naruse (Yui NARUSE) almost 13 years ago
- Status changed from Rejected to Feedback
Updated by ko1 (Koichi Sasada) over 12 years ago
- Assignee set to naruse (Yui NARUSE)
Updated by naruse (Yui NARUSE) over 12 years ago
- Status changed from Feedback to Closed
- % Done changed from 0 to 100