transport.go 609 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package io
  2. import (
  3. "io"
  4. "v2ray.com/core/common/errors"
  5. "v2ray.com/core/common/log"
  6. )
  7. func Pipe(reader Reader, writer Writer) error {
  8. for {
  9. buffer, err := reader.Read()
  10. if err != nil {
  11. log.Debug("IO: Pipe exits as ", err)
  12. return err
  13. }
  14. if buffer.IsEmpty() {
  15. buffer.Release()
  16. continue
  17. }
  18. err = writer.Write(buffer)
  19. if err != nil {
  20. log.Debug("IO: Pipe exits as ", err)
  21. buffer.Release()
  22. return err
  23. }
  24. }
  25. }
  26. func PipeUntilEOF(reader Reader, writer Writer) error {
  27. err := Pipe(reader, writer)
  28. if err != nil && errors.Cause(err) != io.EOF {
  29. return err
  30. }
  31. return nil
  32. }