|  | @@ -76,6 +76,7 @@ func startCommunicate(request *protocol.VMessRequest, dest v2net.Destination, ra
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	input := ray.OutboundInput()
 | 
	
		
			
				|  |  |  	output := ray.OutboundOutput()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	var requestFinish, responseFinish sync.Mutex
 | 
	
		
			
				|  |  |  	requestFinish.Lock()
 | 
	
		
			
				|  |  |  	responseFinish.Lock()
 | 
	
	
		
			
				|  | @@ -110,20 +111,23 @@ func handleRequest(conn net.Conn, request *protocol.VMessRequest, firstPacket v2
 | 
	
		
			
				|  |  |  	firstChunk := firstPacket.Chunk()
 | 
	
		
			
				|  |  |  	moreChunks := firstPacket.MoreChunks()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	if firstChunk == nil && moreChunks {
 | 
	
		
			
				|  |  | +	for firstChunk == nil && moreChunks {
 | 
	
		
			
				|  |  |  		firstChunk, moreChunks = <-input
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	if firstChunk != nil {
 | 
	
		
			
				|  |  | -		aesStream.XORKeyStream(firstChunk.Value, firstChunk.Value)
 | 
	
		
			
				|  |  | -		buffer.Append(firstChunk.Value)
 | 
	
		
			
				|  |  | -		firstChunk.Release()
 | 
	
		
			
				|  |  | +	if firstChunk == nil && !moreChunks {
 | 
	
		
			
				|  |  | +		log.Warning("VMessOut: Nothing to send. Existing...")
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		_, err = conn.Write(buffer.Value)
 | 
	
		
			
				|  |  | -		if err != nil {
 | 
	
		
			
				|  |  | -			log.Error("VMessOut: Failed to write VMess request: %v", err)
 | 
	
		
			
				|  |  | -			return
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +	aesStream.XORKeyStream(firstChunk.Value, firstChunk.Value)
 | 
	
		
			
				|  |  | +	buffer.Append(firstChunk.Value)
 | 
	
		
			
				|  |  | +	firstChunk.Release()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	_, err = conn.Write(buffer.Value)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		log.Error("VMessOut: Failed to write VMess request: %v", err)
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if moreChunks {
 |