go-tunnel/helper.go

34 lines
438 B
Go

package tunnel
import (
"io"
"net"
)
func pipe(client net.Conn, server net.Conn) (err error) {
stop := make(chan bool)
go func() {
err = relay(client, server, stop)
}()
go func() {
err = relay(server, client, stop)
}()
select {
case <-stop:
return err
}
}
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
}