--- /usr/local/lib/ruby/1.8/net/protocol.rb.orig 2009-06-27 16:25:30.000000000 +0100 +++ /usr/local/lib/ruby/1.8/net/protocol.rb 2009-06-27 17:03:41.000000000 +0100 @@ -82,5 +82,5 @@ begin while read_bytes + @rbuf.size < len - dest << (s = rbuf_consume(@rbuf.size)) + dest << (s = rbuf_consume(nil)) read_bytes += s.size rbuf_fill @@ -100,5 +100,5 @@ begin while true - dest << (s = rbuf_consume(@rbuf.size)) + dest << (s = rbuf_consume(nil)) read_bytes += s.size rbuf_fill @@ -119,5 +119,5 @@ rescue EOFError raise unless ignore_eof - return rbuf_consume(@rbuf.size) + return rbuf_consume(nil) end end @@ -130,11 +130,17 @@ def rbuf_fill - timeout(@read_timeout) { - @rbuf << @io.sysread(1024) - } + if IO.select( [ @io ], nil, nil, @read_timeout ) + @rbuf << @io.sysread(1024000) + else + raise Timeout::Error, "read timeout" + end end def rbuf_consume(len) - s = @rbuf.slice!(0, len) + if len.nil? or @rbuf.size == len + s = @rbuf + else + s = @rbuf.slice!(0, len) + end @debug_output << %Q[-> #{s.dump}\n] if @debug_output s