package server import ( "errors" "fmt" "net/http" "time" ) const ( // httpReadTimeout is the maximum duration for reading the // entire request, including the body. httpReadTimeout = 10 * time.Second // httpWriteTimeout is the maximum duration before timing out // writes of the response. httpWriteTimeout = 10 * time.Second // httpMaxHeaderBytes is the maximum number of bytes the // server will read parsing the request headers. httpMaxHeaderBytes = 1 << 20 ) func (s *Server) serveUntilShutdown() { listenAddr := fmt.Sprintf(":%d", s.params.Config.Port) s.httpServer = &http.Server{ Addr: listenAddr, ReadTimeout: httpReadTimeout, WriteTimeout: httpWriteTimeout, MaxHeaderBytes: httpMaxHeaderBytes, Handler: s, } // add routes // this does any necessary setup in each handler s.SetupRoutes() s.log.Info("http begin listen", "listenaddr", listenAddr) err := s.httpServer.ListenAndServe() if err != nil && !errors.Is(err, http.ErrServerClosed) { s.log.Error("listen error", "error", err) if s.cancelFunc != nil { s.cancelFunc() } } } // ServeHTTP delegates to the router. func (s *Server) ServeHTTP( w http.ResponseWriter, r *http.Request, ) { s.router.ServeHTTP(w, r) }