diff options
author | Eric Wong <normalperson@yhbt.net> | 2010-11-02 12:32:23 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2010-11-05 18:36:08 -0700 |
commit | 42747db815ad668b20849afb2a9dcdd1319713ae (patch) | |
tree | 6dcd7cb02f11bcfad40de6c72a9a6570df71c4d7 /lib/rainbows/process_client.rb | |
parent | 427ef4a2953a4b2d34f7dd89566a0cb5ee6e734d (diff) | |
download | rainbows-42747db815ad668b20849afb2a9dcdd1319713ae.tar.gz |
Errno::EAGAIN is still a problem under Ruby 1.9.2, so try harder to avoid it and use kgio methods. Even when 1.9.3 is available, kgio will still be faster as exceptions are slower than normal return values.
Diffstat (limited to 'lib/rainbows/process_client.rb')
-rw-r--r-- | lib/rainbows/process_client.rb | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/lib/rainbows/process_client.rb b/lib/rainbows/process_client.rb index d2c9d0e..d66c1ae 100644 --- a/lib/rainbows/process_client.rb +++ b/lib/rainbows/process_client.rb @@ -9,10 +9,6 @@ module Rainbows::ProcessClient TeeInput = Rainbows::TeeInput include Rainbows::Const - def wait_headers_readable(client) - IO.select([client], nil, nil, G.kato) - end - # once a client is accepted, it is processed in its entirety here # in 3 easy steps: read request, call app, write app response # this is used by synchronous concurrency models @@ -25,8 +21,8 @@ module Rainbows::ProcessClient begin # loop until env = hp.parse - wait_headers_readable(client) or return - buf << client.kgio_read!(16384) + client.timed_read(buf2 ||= "") or return + buf << buf2 end env[CLIENT_IO] = client |