diff --git a/lib/couchrest/monkeypatches.rb b/lib/couchrest/monkeypatches.rb index 56942be..c24f092 100644 --- a/lib/couchrest/monkeypatches.rb +++ b/lib/couchrest/monkeypatches.rb @@ -31,13 +31,19 @@ if RUBY_VERSION.to_f < 1.9 class Net::BufferedIO #:nodoc: alias :old_rbuf_fill :rbuf_fill def rbuf_fill - begin - @rbuf << @io.read_nonblock(65536) - rescue Errno::EWOULDBLOCK - if IO.select([@io], nil, nil, @read_timeout) + if @io.respond_to?(:read_nonblock) + begin @rbuf << @io.read_nonblock(65536) - else - raise Timeout::Error + rescue Errno::EWOULDBLOCK + if IO.select([@io], nil, nil, @read_timeout) + retry + else + raise Timeout::TimeoutError + end + end + else + timeout(@read_timeout) do + @rbuf << @io.sysread(65536) end end end