From 30564efd8503aec2d2e8ad26525b27e8504b96c5 Mon Sep 17 00:00:00 2001 From: William Petit Date: Fri, 23 Oct 2020 13:42:44 +0200 Subject: [PATCH] feat: dispatch proxy error --- client.go | 4 +++- helper.go | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/client.go b/client.go index ae841f4..f787f8f 100644 --- a/client.go +++ b/client.go @@ -117,7 +117,9 @@ func (c *Client) handleProxyRequest(ctx context.Context, m *control.Message) (*c return nil, errors.WithStack(err) } - pipe(stream, net) + if err := pipe(stream, net); err != nil { + return nil, errors.WithStack(err) + } return nil, nil } diff --git a/helper.go b/helper.go index d3f5eb8..7493971 100644 --- a/helper.go +++ b/helper.go @@ -5,22 +5,29 @@ import ( "net" ) -func pipe(client net.Conn, server net.Conn) { +func pipe(client net.Conn, server net.Conn) (err error) { stop := make(chan bool) - go relay(client, server, stop) - go relay(server, client, stop) + go func() { + err = relay(client, server, stop) + }() + go func() { + err = relay(server, client, stop) + }() select { case <-stop: - return + return err } } -func relay(src net.Conn, dst net.Conn, stop chan bool) { - io.Copy(dst, src) +func relay(src io.ReadCloser, dst io.WriteCloser, stop chan bool) (err error) { + _, err = io.Copy(dst, src) + dst.Close() src.Close() + stop <- true + return }