From 9ab648f027d25b90fb2e7011fcd92091f19e7b02 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 18 Nov 2009 00:08:23 -0800 Subject: rev: implement keepalive timeout This is a bit trickier than the rest since we have to ensure deferred (proxied) responses aren't nuked. --- lib/rainbows/rev/client.rb | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'lib/rainbows/rev/client.rb') diff --git a/lib/rainbows/rev/client.rb b/lib/rainbows/rev/client.rb index 9decac9..b30bd0e 100644 --- a/lib/rainbows/rev/client.rb +++ b/lib/rainbows/rev/client.rb @@ -23,8 +23,13 @@ module Rainbows schedule_write unless out_headers # triggers a write end + def timeout? + @_write_buffer.empty? && @deferred_bodies.empty? and close.nil? + end + def app_call begin + KATO.delete(self) (@env[RACK_INPUT] = @input).rewind @env[REMOTE_ADDR] = @remote_addr response = APP.call(@env.update(RACK_DEFAULTS)) @@ -38,6 +43,7 @@ module Rainbows @state = :headers # keepalive requests are always body-less, so @input is unchanged @hp.headers(@env, @buf) and next + KATO[self] = Time.now else quit end -- cgit v1.2.3-24-ge0c7