瀏覽代碼

Properly close inbound when no payload

v2ray 9 年之前
父節點
當前提交
d9b59133cc
共有 1 個文件被更改,包括 10 次插入11 次删除
  1. 10 11
      proxy/vmess/inbound/inbound.go

+ 10 - 11
proxy/vmess/inbound/inbound.go

@@ -191,14 +191,13 @@ func (this *VMessInboundHandler) HandleConnection(connection *hub.Connection) {
 	session.EncodeResponseHeader(response, writer)
 
 	bodyWriter := session.EncodeResponseBody(writer)
+	var v2writer v2io.Writer = v2io.NewAdaptiveWriter(bodyWriter)
+	if request.Option.Has(protocol.RequestOptionChunkStream) {
+		v2writer = vmessio.NewAuthChunkWriter(v2writer)
+	}
 
 	// Optimize for small response packet
 	if data, err := output.Read(); err == nil {
-		var v2writer v2io.Writer = v2io.NewAdaptiveWriter(bodyWriter)
-		if request.Option.Has(protocol.RequestOptionChunkStream) {
-			v2writer = vmessio.NewAuthChunkWriter(v2writer)
-		}
-
 		if err := v2writer.Write(data); err != nil {
 			connection.SetReusable(false)
 		}
@@ -210,14 +209,14 @@ func (this *VMessInboundHandler) HandleConnection(connection *hub.Connection) {
 			connection.SetReusable(false)
 		}
 
-		output.Release()
-		if request.Option.Has(protocol.RequestOptionChunkStream) {
-			if err := v2writer.Write(alloc.NewSmallBuffer().Clear()); err != nil {
-				connection.SetReusable(false)
-			}
+	}
+	output.Release()
+	if request.Option.Has(protocol.RequestOptionChunkStream) {
+		if err := v2writer.Write(alloc.NewSmallBuffer().Clear()); err != nil {
+			connection.SetReusable(false)
 		}
-		v2writer.Release()
 	}
+	v2writer.Release()
 
 	readFinish.Lock()
 }