diff --git a/cmd/serve_cmd.go b/cmd/serve_cmd.go index d0dac6400..80e4f5829 100644 --- a/cmd/serve_cmd.go +++ b/cmd/serve_cmd.go @@ -5,6 +5,7 @@ import ( "net" "net/http" "sync" + "syscall" "time" "github.com/pkg/errors" @@ -105,7 +106,18 @@ func serve(ctx context.Context) { } }() - if err := httpSrv.ListenAndServe(); err != http.ErrServerClosed { + lc := net.ListenConfig{ + Control: func(network, address string, c syscall.RawConn) error { + return c.Control(func(fd uintptr) { + syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEPORT, 1) + }) + }, + } + listener, err := lc.Listen(ctx, "tcp", addr) + if err != nil { log.WithError(err).Fatal("http server listen failed") } + if err := httpSrv.Serve(listener); err != nil { + log.WithError(err).Fatal("http server serve failed") + } }