From 15631717fce044fbad2f386a7b1c7daf4bdd83d2 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 21 Oct 2010 16:25:39 -0700 Subject: code shuffling for kgio Despite the large number of changes, most of it is code movement here. --- lib/rainbows/http_request.rb | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 lib/rainbows/http_request.rb (limited to 'lib/rainbows/http_request.rb') diff --git a/lib/rainbows/http_request.rb b/lib/rainbows/http_request.rb new file mode 100644 index 0000000..56c24ca --- /dev/null +++ b/lib/rainbows/http_request.rb @@ -0,0 +1,39 @@ +# -*- encoding: binary -*- +class Rainbows::HttpRequest < Unicorn::HttpRequest + attr_accessor :remote_addr + + def keepalive? + if rv = keepalive? + env.clear + parser.reset + end + rv + end + + def initialize(socket) + @remote_addr = if socket.respond_to?(:kgio_addr) + socket.kgio_addr + elsif socket.respond_to?(:peeraddr) + socket.peeraddr[-1] + else + Kgio::LOCALHOST + end + super() + end + + def wait_headers_readable(socket) + IO.select([socket], nil, nil, Rainbows::G.kato) + end + + def tryread(socket) + socket.kgio_read!(16384, b = buf) + until e = parse + wait_headers_readable(socket) + b << socket.kgio_read!(16384) + end + e[Rainbows::Const::CLIENT_IO] = socket + e[RACK_INPUT] = 0 == content_length ? NULL_IO : TeeInput.new(socket, self) + e[REMOTE_ADDR] = @remote_addr + e.merge!(DEFAULTS) + end +end -- cgit v1.2.3-24-ge0c7