mirror of
https://github.com/jpillora/chisel
synced 2026-06-08 15:07:02 +00:00
34 lines
396 B
Go
34 lines
396 B
Go
package chisel
|
|
|
|
import (
|
|
"io"
|
|
"net"
|
|
"sync"
|
|
)
|
|
|
|
func Pipe(src net.Conn, dst net.Conn) (int64, int64) {
|
|
|
|
var sent, received int64
|
|
var c = make(chan bool)
|
|
var o sync.Once
|
|
|
|
close := func() {
|
|
src.Close()
|
|
dst.Close()
|
|
close(c)
|
|
}
|
|
|
|
go func() {
|
|
received, _ = io.Copy(src, dst)
|
|
o.Do(close)
|
|
}()
|
|
|
|
go func() {
|
|
sent, _ = io.Copy(dst, src)
|
|
o.Do(close)
|
|
}()
|
|
|
|
<-c
|
|
return sent, received
|
|
}
|