From 9bf4e691ceffc8a725f8a54a5af0479af4375219 Mon Sep 17 00:00:00 2001 From: Adphi Date: Mon, 5 Sep 2022 15:32:33 +0200 Subject: [PATCH] add WithListener option Signed-off-by: Adphi --- service/options.go | 10 ++++++++++ service/service.go | 22 +++++++++++++--------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/service/options.go b/service/options.go index 3dafb8f..e8da55a 100644 --- a/service/options.go +++ b/service/options.go @@ -127,6 +127,15 @@ func WithAddress(addr string) Option { } } +// WithListener specifies a listener for the service. +// It can be used to specify a custom listener. +// This will override the WithAddress and WithTLSConfig options +func WithListener(lis net.Listener) Option { + return func(o *options) { + o.lis = lis + } +} + func WithReflection(r bool) Option { return func(o *options) { o.reflection = r @@ -330,6 +339,7 @@ type options struct { name string version string address string + lis net.Listener reflection bool health bool diff --git a/service/service.go b/service/service.go index b7c5e43..fa57003 100644 --- a/service/service.go +++ b/service/service.go @@ -151,17 +151,21 @@ func (s *service) run() error { s.opts.address = strings.TrimPrefix(s.opts.address, "unix://") } - lis, err := net.Listen(network, s.opts.address) - if err != nil { - return err - } - if s.opts.tlsConfig != nil { - lis = tls.NewListener(lis, s.opts.tlsConfig) + if s.opts.lis == nil { + lis, err := net.Listen(network, s.opts.address) + if err != nil { + return err + } + if s.opts.tlsConfig != nil { + lis = tls.NewListener(lis, s.opts.tlsConfig) + } + s.opts.lis = lis + s.opts.address = lis.Addr().String() + } else { + s.opts.address = s.opts.lis.Addr().String() } - s.opts.address = lis.Addr().String() - - mux := cmux.New(lis) + mux := cmux.New(s.opts.lis) mux.SetReadTimeout(5 * time.Second) gLis := mux.MatchWithWriters(cmux.HTTP2MatchHeaderFieldSendSettings("content-type", "application/grpc"))