remove unnecessary "::" constant prefixing
[rainbows.git] / lib / rainbows / error.rb
blob68cdec462f14509db6dd626c30554b2eba3e8358
1 # -*- encoding: binary -*-
2 # :enddoc:
3 module Rainbows::Error
5   G = Rainbows::G
7   # if we get any error, try to write something back to the client
8   # assuming we haven't closed the socket, but don't get hung up
9   # if the socket is already closed or broken.  We'll always ensure
10   # the socket is closed at the end of this function
11   def self.write(io, e)
12     if msg = response(e)
13       if io.respond_to?(:kgio_trywrite)
14         io.kgio_trywrite(msg)
15       else
16         io.write_nonblock(msg)
17       end
18     end
19     rescue
20   end
22   def self.app(e)
23     G.server.logger.error "app error: #{e.inspect}"
24     G.server.logger.error e.backtrace.join("\n")
25     rescue
26   end
28   def self.listen_loop(e)
29     G.alive or return
30     G.server.logger.error "listen loop error: #{e.inspect}."
31     G.server.logger.error e.backtrace.join("\n")
32     rescue
33   end
35   def self.response(e)
36     case e
37     when EOFError, Errno::ECONNRESET, Errno::EPIPE, Errno::EINVAL,
38          Errno::EBADF, Errno::ENOTCONN
39       # swallow error if client shuts down one end or disconnects
40     when Rainbows::Response416
41       Rainbows::Const::ERROR_416_RESPONSE
42     when Unicorn::HttpParserError
43       Rainbows::Const::ERROR_400_RESPONSE # try to tell the client they're bad
44     when IOError # HttpParserError is an IOError
45     else
46       app(e)
47       Rainbows::Const::ERROR_500_RESPONSE
48     end
49   end
50 end