upgrade to Kgio 2.x and Unicorn 3.x
[rainbows.git] / lib / rainbows / timed_read.rb
blob0637cefc03ff9f7d2f45cfe869669b5ca27745db
1 # -*- encoding: binary -*-
2 # :enddoc:
3 module Rainbows::TimedRead
4   G = Rainbows::G # :nodoc:
6   def kgio_wait_readable
7     IO.select([self], nil, nil, G.kato)
8   end
10   # used for reading headers (respecting keepalive_timeout)
11   def timed_read(buf)
12     expire = nil
13     begin
14       case rv = kgio_tryread(16384, buf)
15       when :wait_readable
16         return if expire && expire < Time.now
17         expire ||= Time.now + G.kato
18         kgio_wait_readable
19       else
20         return rv
21       end
22     end while true
23   end
24 end