func (srv *Server) handler(c net.Conn) { startTime := time.Nanoseconds() defer srv.connectionFinished(c) buf, err := bufio.NewReaderSize(c, 8192) if err != nil { Error("%s Read buffer fail: %v", srv.serverLogPrefix(), err) return } var req *http.Request // no keepalive (for now) reqCount := 0 keepAlive := true for err == nil && keepAlive { if req, err = http.ReadRequest(buf); err == nil { if req.Header.Get("Connection") != "Keep-Alive" { keepAlive = false } request := newRequest(req, c, startTime) reqCount++ var res *http.Response pssInit := new(PipelineStageStat) pssInit.Name = "server.Init" pssInit.StartTime = startTime pssInit.EndTime = time.Nanoseconds() request.appendPipelineStage(pssInit) // execute the pipeline if res = srv.Pipeline.execute(request); res == nil { res = SimpleResponse(req, 404, nil, "Not Found") } // cleanup request.startPipelineStage("server.ResponseWrite") req.Body.Close() wbuf := bufio.NewWriter(c) res.Write(wbuf) wbuf.Flush() if res.Body != nil { res.Body.Close() } request.finishPipelineStage() request.finishRequest() srv.requestFinished(request) } else { // EOF is socket closed if err != io.ErrUnexpectedEOF { Error("%s %v ERROR reading request: %v", srv.serverLogPrefix(), c.RemoteAddr(), err) } } } //Debug("%s Processed %v requests on connection %v", srv.serverLogPrefix(), reqCount, c.RemoteAddr()) }