feat: dispatch proxy error
This commit is contained in:
parent
7aa977d2fe
commit
30564efd85
|
@ -117,7 +117,9 @@ func (c *Client) handleProxyRequest(ctx context.Context, m *control.Message) (*c
|
||||||
return nil, errors.WithStack(err)
|
return nil, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
pipe(stream, net)
|
if err := pipe(stream, net); err != nil {
|
||||||
|
return nil, errors.WithStack(err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
19
helper.go
19
helper.go
|
@ -5,22 +5,29 @@ import (
|
||||||
"net"
|
"net"
|
||||||
)
|
)
|
||||||
|
|
||||||
func pipe(client net.Conn, server net.Conn) {
|
func pipe(client net.Conn, server net.Conn) (err error) {
|
||||||
stop := make(chan bool)
|
stop := make(chan bool)
|
||||||
|
|
||||||
go relay(client, server, stop)
|
go func() {
|
||||||
go relay(server, client, stop)
|
err = relay(client, server, stop)
|
||||||
|
}()
|
||||||
|
go func() {
|
||||||
|
err = relay(server, client, stop)
|
||||||
|
}()
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case <-stop:
|
case <-stop:
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func relay(src net.Conn, dst net.Conn, stop chan bool) {
|
func relay(src io.ReadCloser, dst io.WriteCloser, stop chan bool) (err error) {
|
||||||
io.Copy(dst, src)
|
_, err = io.Copy(dst, src)
|
||||||
|
|
||||||
dst.Close()
|
dst.Close()
|
||||||
src.Close()
|
src.Close()
|
||||||
|
|
||||||
stop <- true
|
stop <- true
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue