|  | @@ -1,7 +1,6 @@
 | 
	
		
			
				|  |  |  package outbound
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import (
 | 
	
		
			
				|  |  | -	"net"
 | 
	
		
			
				|  |  |  	"sync"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	"github.com/v2ray/v2ray-core/app"
 | 
	
	
		
			
				|  | @@ -70,7 +69,7 @@ func (this *VMessOutboundHandler) Dispatch(target v2net.Destination, payload *al
 | 
	
		
			
				|  |  |  	return nil
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (this *VMessOutboundHandler) handleRequest(session *raw.ClientSession, conn net.Conn, request *protocol.RequestHeader, payload *alloc.Buffer, input v2io.Reader, finish *sync.Mutex) {
 | 
	
		
			
				|  |  | +func (this *VMessOutboundHandler) handleRequest(session *raw.ClientSession, conn *hub.Connection, request *protocol.RequestHeader, payload *alloc.Buffer, input v2io.Reader, finish *sync.Mutex) {
 | 
	
		
			
				|  |  |  	defer finish.Unlock()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	writer := v2io.NewBufferedWriter(conn)
 | 
	
	
		
			
				|  | @@ -85,7 +84,11 @@ func (this *VMessOutboundHandler) handleRequest(session *raw.ClientSession, conn
 | 
	
		
			
				|  |  |  	streamWriter.Write(payload)
 | 
	
		
			
				|  |  |  	writer.SetCached(false)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	v2io.Pipe(input, streamWriter)
 | 
	
		
			
				|  |  | +	err := v2io.Pipe(input, streamWriter)
 | 
	
		
			
				|  |  | +	if err != vmessio.ErrorStreamCompleted {
 | 
	
		
			
				|  |  | +		conn.SetReusable(false)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	if request.Option.IsChunkStream() {
 | 
	
		
			
				|  |  |  		streamWriter.Write(alloc.NewSmallBuffer().Clear())
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -93,7 +96,7 @@ func (this *VMessOutboundHandler) handleRequest(session *raw.ClientSession, conn
 | 
	
		
			
				|  |  |  	return
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (this *VMessOutboundHandler) handleResponse(session *raw.ClientSession, conn net.Conn, request *protocol.RequestHeader, dest v2net.Destination, output v2io.Writer, finish *sync.Mutex) {
 | 
	
		
			
				|  |  | +func (this *VMessOutboundHandler) handleResponse(session *raw.ClientSession, conn *hub.Connection, request *protocol.RequestHeader, dest v2net.Destination, output v2io.Writer, finish *sync.Mutex) {
 | 
	
		
			
				|  |  |  	defer finish.Unlock()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	reader := v2io.NewBufferedReader(conn)
 | 
	
	
		
			
				|  | @@ -116,7 +119,11 @@ func (this *VMessOutboundHandler) handleResponse(session *raw.ClientSession, con
 | 
	
		
			
				|  |  |  		bodyReader = v2io.NewAdaptiveReader(decryptReader)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	v2io.Pipe(bodyReader, output)
 | 
	
		
			
				|  |  | +	err = v2io.Pipe(bodyReader, output)
 | 
	
		
			
				|  |  | +	if err != vmessio.ErrorStreamCompleted {
 | 
	
		
			
				|  |  | +		conn.SetReusable(false)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	bodyReader.Release()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	return
 |