bridge.go 439 B

1234567891011121314151617181920212223242526
  1. package util
  2. import "io"
  3. // 桥接两个 IO 连接
  4. func Bridge(conn1, conn2 io.ReadWriteCloser) error {
  5. defer conn1.Close()
  6. defer conn2.Close()
  7. errChan := make(chan error, 2)
  8. // Copy conn1 to conn2
  9. go func() {
  10. _, err := io.Copy(conn2, conn1)
  11. errChan <- err
  12. }()
  13. // Copy conn2 to conn1
  14. go func() {
  15. _, err := io.Copy(conn1, conn2)
  16. errChan <- err
  17. }()
  18. // Wait for either direction to finish or error
  19. return <-errChan
  20. }