Bläddra i källkod

ensure everything are written

Darien Raymond 7 år sedan
förälder
incheckning
7a4b0fff07
1 ändrade filer med 14 tillägg och 2 borttagningar
  1. 14 2
      common/crypto/io.go

+ 14 - 2
common/crypto/io.go

@@ -4,7 +4,6 @@ import (
 	"crypto/cipher"
 	"io"
 
-	"v2ray.com/core/common"
 	"v2ray.com/core/common/buf"
 )
 
@@ -55,9 +54,22 @@ func (w *CryptionWriter) Write(data []byte) (int, error) {
 func (w *CryptionWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {
 	defer mb.Release()
 
+	size := mb.Len()
+	if size == 0 {
+		return nil
+	}
+
 	bs := mb.ToNetBuffers()
 	for _, b := range bs {
 		w.stream.XORKeyStream(b, b)
 	}
-	return common.Error2(bs.WriteTo(w.writer))
+
+	for size > 0 {
+		n, err := bs.WriteTo(w.writer)
+		if err != nil {
+			return err
+		}
+		size -= int32(n)
+	}
+	return nil
 }