add WithListener option

Signed-off-by: Adphi <philippe.adrien.nousse@gmail.com>
This commit is contained in:
Adphi 2022-09-05 15:32:33 +02:00
parent b230278441
commit 9bf4e691ce
Signed by: adphi
GPG Key ID: 46BE4062DB2397FF
2 changed files with 23 additions and 9 deletions

View File

@ -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 { func WithReflection(r bool) Option {
return func(o *options) { return func(o *options) {
o.reflection = r o.reflection = r
@ -330,6 +339,7 @@ type options struct {
name string name string
version string version string
address string address string
lis net.Listener
reflection bool reflection bool
health bool health bool

View File

@ -151,6 +151,7 @@ func (s *service) run() error {
s.opts.address = strings.TrimPrefix(s.opts.address, "unix://") s.opts.address = strings.TrimPrefix(s.opts.address, "unix://")
} }
if s.opts.lis == nil {
lis, err := net.Listen(network, s.opts.address) lis, err := net.Listen(network, s.opts.address)
if err != nil { if err != nil {
return err return err
@ -158,10 +159,13 @@ func (s *service) run() error {
if s.opts.tlsConfig != nil { if s.opts.tlsConfig != nil {
lis = tls.NewListener(lis, s.opts.tlsConfig) lis = tls.NewListener(lis, s.opts.tlsConfig)
} }
s.opts.lis = lis
s.opts.address = lis.Addr().String() s.opts.address = lis.Addr().String()
} else {
s.opts.address = s.opts.lis.Addr().String()
}
mux := cmux.New(lis) mux := cmux.New(s.opts.lis)
mux.SetReadTimeout(5 * time.Second) mux.SetReadTimeout(5 * time.Second)
gLis := mux.MatchWithWriters(cmux.HTTP2MatchHeaderFieldSendSettings("content-type", "application/grpc")) gLis := mux.MatchWithWriters(cmux.HTTP2MatchHeaderFieldSendSettings("content-type", "application/grpc"))