package zioutil import ( "io" "sync" ) func SlowCopy(w io.Writer, r io.Reader, stepsize int) (n int, err error) { rbuf := make([]byte, stepsize) cnt := 0 for { n, err := r.Read(rbuf) if n == 0 { continue } if err != nil { return cnt, err } n, err = w.Write(rbuf) if err != nil { return cnt, err } cnt += n } } func SlowBidiCopy(rw1, rw2 io.ReadWriter, stepsize12, stepsize21 int) (n12, n21 int, err12, err21 error) { wg := sync.WaitGroup{} wg.Add(2) go func() { n12, err12 = SlowCopy(rw2, rw1, stepsize12) wg.Done() }() go func() { n21, err21 = SlowCopy(rw1, rw2, stepsize21) wg.Done() }() wg.Wait() return }