diff --git a/pkg/proxy/net.go b/pkg/proxy/net.go index 24ea8cb..85e3622 100644 --- a/pkg/proxy/net.go +++ b/pkg/proxy/net.go @@ -41,7 +41,11 @@ type ConnNotify struct { closed chan struct{} } -func (c *ConnNotify) Close() { - c.Conn.Close() - c.closed <- struct{}{} +func (c *ConnNotify) Close() error { + err := c.Conn.Close() + select { + case c.closed <- struct{}{}: + default: + } + return err } diff --git a/pkg/proxy/proxy.go b/pkg/proxy/proxy.go index 75cb65d..79c114d 100644 --- a/pkg/proxy/proxy.go +++ b/pkg/proxy/proxy.go @@ -208,8 +208,8 @@ func (p *Proxy) handleConnect(w http.ResponseWriter) { return } - clientConnNotify := ConnNotify{tlsConn, make(chan struct{})} - l := &OnceAcceptListener{clientConnNotify.Conn} + clientConnNotify := &ConnNotify{tlsConn, make(chan struct{}, 1)} + l := &OnceAcceptListener{clientConnNotify} err = http.Serve(l, p) if err != nil && !errors.Is(err, ErrAlreadyAccepted) {