From 7363f49ae34121b54de81d40214046dba4902586 Mon Sep 17 00:00:00 2001 From: Juvenn Woo Date: Sat, 24 Aug 2024 16:44:50 +0800 Subject: [PATCH] metric-api: http server error handling --- experimental/metrics/server.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/experimental/metrics/server.go b/experimental/metrics/server.go index 36e4083d..41215672 100644 --- a/experimental/metrics/server.go +++ b/experimental/metrics/server.go @@ -1,6 +1,8 @@ package metrics import ( + "errors" + "net" "net/http" "github.com/sagernet/sing-box/adapter" @@ -53,12 +55,15 @@ func (s *metricServer) Start() error { if !s.opts.Enabled() { return nil } + listener, err := net.Listen("tcp", s.opts.Listen) + if err != nil { + return err + } + s.logger.Info("metrics api listening at ", s.http.Addr, s.opts.Path) go func() { - err := s.http.ListenAndServe() - if err != nil { - s.logger.Error("metrics api listen error", err) - } else { - s.logger.Info("metrics api listening at ", s.http.Addr, s.opts.Path) + err := s.http.Serve(listener) + if err != nil && !errors.Is(err, http.ErrServerClosed) { + s.logger.Error("metrics api serve error: ", err) } }() return nil