// SetupMainServer allocates a listener socket and starts a web server with graceful restart // on the specified IP address and port. The ipPort has the format "ip_address:port" or // ":port" for 0.0.0.0/port. func SetupMainServer(ipPort string, mux *web.Mux) { listener, err := net.Listen("tcp4", ipPort) if err != nil { FatalError(err.Error()) } // Install our handler at the root of the standard net/http default mux. // This allows packages like expvar to continue working as expected. mux.Compile() http.Handle("/", mux) graceful.HandleSignals() graceful.PreHook(func() { log15.Warn("Gracefully stopping on signal") }) graceful.PostHook(func() { log.Printf("Gracefully stopped") }) err = graceful.Serve(listener, http.DefaultServeMux) if err != nil { FatalError(err.Error()) } graceful.Wait() }