go-tunnel/helper.go

34 lines
438 B
Go
Raw Normal View History

2020-10-21 18:00:15 +02:00
package tunnel
import (
"io"
"net"
)
2020-10-23 13:42:44 +02:00
func pipe(client net.Conn, server net.Conn) (err error) {
2020-10-21 18:00:15 +02:00
stop := make(chan bool)
2020-10-23 13:42:44 +02:00
go func() {
err = relay(client, server, stop)
}()
go func() {
err = relay(server, client, stop)
}()
2020-10-21 18:00:15 +02:00
select {
case <-stop:
2020-10-23 13:42:44 +02:00
return err
2020-10-21 18:00:15 +02:00
}
}
2020-10-23 13:42:44 +02:00
func relay(src io.ReadCloser, dst io.WriteCloser, stop chan bool) (err error) {
_, err = io.Copy(dst, src)
2020-10-21 18:00:15 +02:00
dst.Close()
src.Close()
2020-10-23 13:42:44 +02:00
2020-10-21 18:00:15 +02:00
stop <- true
2020-10-23 13:42:44 +02:00
2020-10-21 18:00:15 +02:00
return
}