From 0b34efc7536076c66b8e70824981dc08d02f156a Mon Sep 17 00:00:00 2001 From: Kyle Sanderson Date: Mon, 25 Dec 2023 04:29:20 -0800 Subject: [PATCH] fix(http): specify ip stack when listen fails (#1306) * fix(http): specify ip stack when listen fails * break your err * fix(http): log msg --------- Co-authored-by: ze0s <43699394+zze0s@users.noreply.github.com> --- internal/http/server.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/internal/http/server.go b/internal/http/server.go index ac307c6..15a8fa4 100644 --- a/internal/http/server.go +++ b/internal/http/server.go @@ -75,18 +75,32 @@ func NewServer(log logger.Logger, config *config.AppConfig, sse *sse.Server, db func (s Server) Open() error { addr := fmt.Sprintf("%v:%v", s.config.Config.Host, s.config.Config.Port) - listener, err := net.Listen("tcp", addr) + + var err error + for _, proto := range []string{"tcp", "tcp4", "tcp6"} { + if err = s.tryToServe(addr, proto); err == nil { + break + } + + s.log.Error().Err(err).Msgf("Failed to start %s server. Attempted to listen on %s", proto, addr) + } + + return err +} + +func (s Server) tryToServe(addr, protocol string) error { + listener, err := net.Listen(protocol, addr) if err != nil { return err } + s.log.Info().Msgf("Starting server %s. Listening on %s", protocol, listener.Addr().String()) + server := http.Server{ Handler: s.Handler(), ReadHeaderTimeout: time.Second * 15, } - s.log.Info().Msgf("Starting server. Listening on %s", listener.Addr().String()) - return server.Serve(listener) }