mirror of
https://github.com/cmz0228/hysteria-dev.git
synced 2025-06-08 05:19:53 +00:00
28 lines
428 B
Go
28 lines
428 B
Go
package utils
|
|
|
|
import (
|
|
"io"
|
|
"sync/atomic"
|
|
)
|
|
|
|
const pipeBufferSize = 65536
|
|
|
|
func Pipe(src, dst io.ReadWriter, atomicCounter *uint64) error {
|
|
buf := make([]byte, pipeBufferSize)
|
|
for {
|
|
rn, err := src.Read(buf)
|
|
if rn > 0 {
|
|
wn, err := dst.Write(buf[:rn])
|
|
if atomicCounter != nil {
|
|
atomic.AddUint64(atomicCounter, uint64(wn))
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|