From: Aaron Patterson Date: 2008-12-03T13:55:44+09:00 Subject: [ruby-dev:37256] Re: [ruby-cvs:27661] Ruby:r20443 (trunk): * lib/net/protocol.rb (Net::BufferedIO#rbuf_fill): use 2008/12/2 Tanaka Akira : > In article <200812020634.mB26YLHf016923@ci.ruby-lang.org>, > matz@ruby-lang.org writes: > >> matz 2008-12-02 15:34:19 +0900 (Tue, 02 Dec 2008) >> >> New Revision: 20443 >> >> http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20443 >> >> Log: >> * lib/net/protocol.rb (Net::BufferedIO#rbuf_fill): use >> read_nonblock instead of sysread wrapped by timeout to boost >> performance. a patch from Aaron Patterson in [ruby-core:20191]. >> fix #806 >> >> Modified files: >> trunk/ChangeLog >> trunk/lib/net/protocol.rb > > これにより https が動かなくなっています。 > > たとえば、test-all では以下の失敗が発生しています。 > > http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20081202T204700.txt.gz : > > 4) Error: > test_get(TestNetHTTPS): > NoMethodError: undefined method `read_nonblock' for # > /home/akr/chkbuild/tmp/build/ruby-trunk/20081202T204700/ruby/test/net/http/test_https.rb:40:in `test_get' > > で、どうすべきかというと、OpenSSL::SSL::SSLSocket が > read_nonblock を提供するのが良いように思います。 > > select system call で判明するのは > 復号する前のデータが 1byte 以上存在していることですが、それが > 復号した後のデータが 1byte 以上存在することと等しいかというと > 疑わしいように思うので。 > > (なんか以前そんな要求があったようなと思って探してみると、 > read ではなく connect と accept だった... [ruby-core:15399]) ごめん。修正を送りました: http://redmine.ruby-lang.org/issues/show/814 -- Aaron Patterson http://tenderlovemaking.com/