From: KOSAKI Motohiro Date: 2010-08-26T13:16:30+09:00 Subject: [ruby-dev:42140] Re: [bug:trunk] GNU/Linux select hang on a socket which TCP state is CLOSED > GNU/Linux で、以下のプログラムがハングします。 > > % uname -mrsv > Linux 2.6.26-2-486 #1 Sat Dec 26 08:37:39 UTC 2009 i686 > % ./ruby -rsocket -ve ' > BasicSocket.do_not_reverse_lookup = true > serv = TCPServer.open("127.0.0.1", 0) > s1 = TCPSocket.open("127.0.0.1", serv.addr[1]) > s2 = serv.accept > s2.close > s1.write("a") rescue p $! > s1.write("a") rescue p $! > Thread.new { > s1.write("a") > }.join' > ruby 1.9.3dev (2010-07-06 trunk 28554) [i686-linux] > # > ここでハング > > まぁ、[ruby-core:31065], [ruby-core:31068] の話なんですが。 > > そういえば、[ruby-dev:34567] というのもありましたが同じかな。 RugyKaigi直前のばたばたしている時期に恐縮ですが、この件はLinux側を直す事で 合意がとれました。tcpのselectも相手側がcloseした所でselectからリターン する仕様に変更になります。 これで明日の開発者会議でRuby開発者様からボコられないかと思うと目から汗が とまりません(やや誇張)