code: func (c *Conn) CopyBytes() error {
  	defer c.Close()
  
  	go func() {
  		// Need this since Copy is only guaranteed to stop when it's source reader
  		// (second arg) hits EOF or error but either conn might close first possibly
  		// causing this goroutine to exit but not the outer one. See
  		// TestConnSrcClosing which will fail if you comment the defer below.
  		defer c.Close()
  		io.Copy(&c.dstW, c.src)
  	}()
  
  	_, err := io.Copy(&c.srcW, c.dst)
  	// Note that we don't wait for the other goroutine to finish because it either
  	// already has due to it's src conn closing, or it will once our defer fires
  	// and closes the source conn. No need for the extra coordination.
  	if atomic.LoadInt32(&c.stopping) == 1 {
  		return nil
  	}
  	return err
  }
docs: // CopyBytes will continuously copy bytes in both directions between src and dst
  // until either connection is closed.