eliminate timed_read module
[rainbows.git] / lib / rainbows / client.rb
blob3d92da18f87c3639e2321a542661ad5e2aebc022
1 # -*- encoding: binary -*-
2 # :enddoc:
4 # this class is used for most synchronous concurrency models
5 class Rainbows::Client < Kgio::Socket
6   def read_expire
7     Time.now + Rainbows.keepalive_timeout
8   end
10   def kgio_wait_readable
11     IO.select([self], nil, nil, Rainbows.keepalive_timeout)
12   end
14   # used for reading headers (respecting keepalive_timeout)
15   def timed_read(buf)
16     expire = nil
17     begin
18       case rv = kgio_tryread(16384, buf)
19       when :wait_readable
20         return if expire && expire < Time.now
21         expire ||= read_expire
22         kgio_wait_readable
23       else
24         return rv
25       end
26     end while true
27   end
29   include Rainbows::ProcessClient
30 end