From: Tanaka Akira Date: 2008-12-03T12:51:57+09:00 Subject: [ruby-dev:37253] Re: [ruby-cvs:27661] Ruby:r20443 (trunk): * lib/net/protocol.rb (Net::BufferedIO#rbuf_fill): use 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]) -- [田中 哲][たなか あきら][Tanaka Akira]