enable serving via custom net.Listener
2 files changed, 14 insertions(+), 4 deletions(-)
changed files
M domain/web/server/server.go → domain/web/server/server.go
@@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "net" "net/http" "time"@@ -35,6 +36,7 @@ Development bool `conf:"-"` LiveReload *livereload.LiveReload `conf:"-"` Domains []string `conf:"-"` WildcardDomains []string `conf:"-"` + Listener net.Listener `conf:"-"` } type Server struct {@@ -111,7 +113,15 @@ IdleTimeout: IdleTimeout, Handler: top, } - if err := s.serveTCP(); !errors.Is(err, http.ErrServerClosed) { + if s.options.Listener == nil { + var err error + s.options.Listener, err = s.tcpListener() + if err != nil { + return fault.Wrap(err, fmsg.With("error creating listener")) + } + } + + if err := s.server.Serve(s.options.Listener); !errors.Is(err, http.ErrServerClosed) { return fault.Wrap(err, fmsg.With("error creating/closing server")) }
M domain/web/server/tcp.go → domain/web/server/tcp.go
@@ -8,7 +8,7 @@ "alin.ovh/x/listenfd" "github.com/Southclaws/fault" ) -func (s *Server) serveTCP() error { +func (s *Server) tcpListener() (net.Listener, error) { addr := joinHostPort(s.options.ListenAddress, s.options.Port) s.log.Debug( "fallback listener",@@ -17,10 +17,10 @@ addr, ) l, err := listenfd.GetListener(0, addr, s.log.Named("tcp.listenfd")) if err != nil { - return fault.Wrap(err) + return nil, fault.Wrap(err) } - return fault.Wrap(s.server.Serve(l)) + return l, nil } func joinHostPort(host string, port int) string {