code shuffling for kgio
[rainbows.git] / lib / rainbows / read_timeout.rb
blobd8245bd789a99a974ffdba3408d5e10bf00173f0
1 # -*- encoding: binary -*-
2 # :enddoc:
3 module Rainbows::ReadTimeout
4   G = Rainbows::G # :nodoc:
6   def wait_readable
7     IO.select([self], nil, nil, G.kato)
8   end
10   # used for reading headers (respecting keepalive_timeout)
11   def read_timeout(buf = "")
12     expire = nil
13     begin
14       case rv = kgio_tryread(16384, buf)
15       when :wait_readable
16         now = Time.now.to_f
17         if expire
18           now > expire and return
19         else
20           expire = now + G.kato
21         end
22         wait_readable
23       else
24         return rv
25       end
26     end while true
27   end
28 end