def process_client(client, buffer)
begin
close_socket = true
while true
case handle_request(client, buffer)
when false
return
when :async
close_socket = false
return
when true
buffer.reset
unless client.reset(@status == :run)
close_socket = false
client.set_timeout @persistent_timeout
@reactor.add client
return
end
end
end
rescue ConnectionError
rescue HttpParserError => e
client.write_400
@events.parse_error self, client.env, e
rescue StandardError => e
client.write_500
@events.unknown_error self, e, "Read"
ensure
buffer.reset
begin
client.close if close_socket
rescue IOError, SystemCallError
rescue StandardError => e
@events.unknown_error self, e, "Client"
end
end
end