Object
# File lib/fcgi.rb, line 99 99: def each_request(&block) 100: graceful = false 101: trap("SIGUSR1") { graceful = true } 102: while true 103: begin 104: session(&block) 105: rescue Errno::EPIPE, EOFError 106: # HTTP request is canceled by the remote user 107: end 108: exit 0 if graceful 109: end 110: end
# File lib/fcgi.rb, line 112 112: def session 113: sock, addr = *@server.accept 114: return unless sock 115: fsock = FastCGISocket.new(sock) 116: req = next_request(fsock) 117: yield req 118: respond_to req, fsock, FCGI_REQUEST_COMPLETE 119: ensure 120: sock.close if sock and not sock.closed? 121: end
# File lib/fcgi.rb, line 153 153: def handle_GET_VALUES(rec) 154: h = {} 155: rec.values.each_key do |name| 156: h[name] = @default_parameters[name] 157: end 158: ValuesRecord.new(FCGI_GET_VALUES_RESULT, rec.request_id, h) 159: end
# File lib/fcgi.rb, line 125 125: def next_request(sock) 126: while rec = sock.read_record 127: if rec.management_record? 128: case rec.type 129: when FCGI_GET_VALUES 130: sock.send_record handle_GET_VALUES(rec) 131: else 132: sock.send_record UnknownTypeRecord.new(rec.request_id, rec.type) 133: end 134: else 135: case rec.type 136: when FCGI_BEGIN_REQUEST 137: @buffers[rec.request_id] = RecordBuffer.new(rec) 138: when FCGI_ABORT_REQUEST 139: raise "got ABORT_REQUEST" # FIXME 140: else 141: buf = @buffers[rec.request_id] or next # inactive request 142: buf.push rec 143: if buf.ready? 144: @buffers.delete rec.request_id 145: return buf.new_request 146: end 147: end 148: end 149: end 150: raise "must not happen: FCGI socket unexpected EOF" 151: end
# File lib/fcgi.rb, line 161 161: def respond_to(req, sock, status) 162: split_data(FCGI_STDOUT, req.id, req.out) do |rec| 163: sock.send_record rec 164: end 165: split_data(FCGI_STDERR, req.id, req.err) do |rec| 166: sock.send_record rec 167: end if req.err.length > 0 168: sock.send_record EndRequestRecord.new(req.id, 0, status) 169: end
# File lib/fcgi.rb, line 173 173: def split_data(type, id, f) 174: unless f.length == 0 175: f.rewind 176: while s = f.read(DATA_UNIT) 177: yield GenericDataRecord.new(type, id, s) 178: end 179: end 180: yield GenericDataRecord.new(type, id, '') 181: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.