Explorar o código

better error handling in vmess inbound

Darien Raymond %!s(int64=8) %!d(string=hai) anos
pai
achega
13e4506781
Modificáronse 1 ficheiros con 14 adicións e 8 borrados
  1. 14 8
      proxy/vmess/inbound/inbound.go

+ 14 - 8
proxy/vmess/inbound/inbound.go

@@ -147,20 +147,26 @@ func transferResponse(session *encoding.ServerSession, request *protocol.Request
 	bodyWriter := session.EncodeResponseBody(request, output)
 
 	// Optimize for small response packet
-	if data, err := input.Read(); err == nil {
-		if err := bodyWriter.Write(data); err != nil {
-			return err
-		}
+	data, err := input.Read()
+	if err != nil {
+		return err
+	}
 
-		if bufferedWriter, ok := output.(*bufio.BufferedWriter); ok {
-			bufferedWriter.SetBuffered(false)
-		}
+	if err := bodyWriter.Write(data); err != nil {
+		return err
+	}
+	data.Release()
 
-		if err := buf.PipeUntilEOF(input, bodyWriter); err != nil {
+	if bufferedWriter, ok := output.(*bufio.BufferedWriter); ok {
+		if err := bufferedWriter.SetBuffered(false); err != nil {
 			return err
 		}
 	}
 
+	if err := buf.PipeUntilEOF(input, bodyWriter); err != nil {
+		return err
+	}
+
 	if request.Option.Has(protocol.RequestOptionChunkStream) {
 		if err := bodyWriter.Write(buf.NewLocal(8)); err != nil {
 			return err