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) }