diff options
Diffstat (limited to 'src/hub/src/spreadspace.org/sfive/s5srvWeb.go')
-rw-r--r-- | src/hub/src/spreadspace.org/sfive/s5srvWeb.go | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/hub/src/spreadspace.org/sfive/s5srvWeb.go b/src/hub/src/spreadspace.org/sfive/s5srvWeb.go index 9e0b474..a112585 100644 --- a/src/hub/src/spreadspace.org/sfive/s5srvWeb.go +++ b/src/hub/src/spreadspace.org/sfive/s5srvWeb.go @@ -33,6 +33,7 @@ package sfive import ( + "context" "encoding/json" "fmt" "io" @@ -392,11 +393,11 @@ func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { return } tc.SetKeepAlive(true) - tc.SetKeepAlivePeriod(180 * time.Second) + tc.SetKeepAlivePeriod(30 * time.Second) return tc, nil } -func webRun(listener *net.TCPListener, srv *Server) (err error) { +func (srv *Server) webRun(listener *net.TCPListener) (err error) { mux := http.NewServeMux() mux.Handle("/healthz", webHandler{srv, webHealthz}) mux.Handle("/hubs", webHandler{srv, webHubs}) @@ -410,11 +411,20 @@ func webRun(listener *net.TCPListener, srv *Server) (err error) { // mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir( ..staticDir.. )))) mux.Handle("/", webHandler{srv, webNotFound}) - server := &http.Server{Handler: mux, ReadTimeout: 60 * time.Second, WriteTimeout: 120 * time.Second} - return server.Serve(tcpKeepAliveListener{listener}) + srv.interfaces.web = &http.Server{Handler: mux, ReadTimeout: 60 * time.Second, WriteTimeout: 60 * time.Second} + return srv.interfaces.web.Serve(tcpKeepAliveListener{listener}) } -func (srv Server) ServeWeb(cfg WebInterfaceConfig) { +func (srv *Server) webStop(ctx context.Context) (err error) { + // TODO: this is a race condition between a call to webRun and webStop... + if srv.interfaces.web == nil { + return nil + } + s5l.Printf("srv|web: shutting down") + return srv.interfaces.web.Shutdown(ctx) +} + +func (srv *Server) ServeWeb(cfg WebInterfaceConfig) { ln, err := net.Listen("tcp", cfg.ListenAddr) if err != nil { s5l.Printf("srv|web: listen() failed: %v", err) @@ -424,5 +434,5 @@ func (srv Server) ServeWeb(cfg WebInterfaceConfig) { s5l.Printf("srv|web: listening on '%s'", cfg.ListenAddr) defer s5l.Println("srv|web: interface stopped") - webRun(ln.(*net.TCPListener), &srv) + srv.webRun(ln.(*net.TCPListener)) } |