diff --git a/handler/relay/handler.go b/handler/relay/handler.go index 5e7e2ce..ec361ac 100644 --- a/handler/relay/handler.go +++ b/handler/relay/handler.go @@ -220,6 +220,14 @@ func (h *relayHandler) Handle(ctx context.Context, conn net.Conn, opts ...handle } } +// Close implements io.Closer interface. +func (h *relayHandler) Close() error { + if h.ep != nil { + return h.ep.Close() + } + return nil +} + func (h *relayHandler) checkRateLimit(addr net.Addr) bool { if h.options.RateLimiter == nil { return true diff --git a/service/service.go b/service/service.go index c632a91..bb455fb 100644 --- a/service/service.go +++ b/service/service.go @@ -2,6 +2,7 @@ package service import ( "context" + "io" "net" "os/exec" "strings" @@ -105,6 +106,9 @@ func (s *defaultService) Close() error { s.execCmds("pre-down", s.options.preDown) defer s.execCmds("post-down", s.options.postDown) + if closer, ok := s.handler.(io.Closer); ok { + closer.Close() + } return s.listener.Close() }