transport.go 563 B

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