diff --git a/app/proxyman/mux/mux.go b/app/proxyman/mux/mux.go index 23ac4707..02ede296 100644 --- a/app/proxyman/mux/mux.go +++ b/app/proxyman/mux/mux.go @@ -182,6 +182,13 @@ func fetchInput(ctx context.Context, s *session, output buf.Writer) { } } +func waitForDone(ctx context.Context, s *session) { + <-ctx.Done() + s.closeUplink() + s.closeDownlink() + s.output.Close() +} + func (m *Client) Dispatch(ctx context.Context, outboundRay ray.OutboundRay) bool { m.access.Lock() defer m.access.Unlock() @@ -210,6 +217,7 @@ func (m *Client) Dispatch(ctx context.Context, outboundRay ray.OutboundRay) bool } m.sessions[id] = s go fetchInput(ctx, s, m.inboundRay.InboundInput()) + go waitForDone(ctx, s) return true }