t0050: improve diagnostics for this test
[rainbows.git] / lib / rainbows / client.rb
blobcc02c0b696637f0f0a00384f45f42cefbabbb06f
1 # -*- encoding: binary -*-
2 # :enddoc:
3 require "io/wait"
5 # this class is used for most synchronous concurrency models
6 class Rainbows::Client < Kgio::Socket
7   include Rainbows::ProcessClient
8   Rainbows.config!(self, :keepalive_timeout)
10   def read_expire
11     Time.now + KEEPALIVE_TIMEOUT
12   end
14   def kgio_wait_readable
15     wait KEEPALIVE_TIMEOUT
16   end
18   # used for reading headers (respecting keepalive_timeout)
19   def timed_read(buf)
20     expire = nil
21     begin
22       case rv = kgio_tryread(CLIENT_HEADER_BUFFER_SIZE, buf)
23       when :wait_readable
24         return if expire && expire < Time.now
25         expire ||= read_expire
26         kgio_wait_readable
27       else
28         return rv
29       end
30     end while true
31   end
33   alias write kgio_write
34 end