| 
					
				 | 
			
			
				@@ -151,14 +151,15 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	requestDone := signal.ExecuteAsync(func() error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	responseDone := signal.ExecuteAsync(func() error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		bufferedWriter := buf.NewBufferedWriter(conn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		responseWriter, err := WriteTCPResponse(request, bufferedWriter) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return errors.New("failed to write response").Base(err).Path("Shadowsocks", "Server") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		payload, err := ray.InboundOutput().Read() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		mergeReader := buf.NewMergingReader(ray.InboundOutput()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		payload, err := mergeReader.Read() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -171,18 +172,17 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if err := buf.PipeUntilEOF(timer, ray.InboundOutput(), responseWriter); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if err := buf.PipeUntilEOF(timer, mergeReader, responseWriter); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return errors.New("failed to transport all TCP response").Base(err).Path("Shadowsocks", "Server") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	responseDone := signal.ExecuteAsync(func() error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	requestDone := signal.ExecuteAsync(func() error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		defer ray.InboundInput().Close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		mergeReader := buf.NewMergingReader(bodyReader) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if err := buf.PipeUntilEOF(timer, mergeReader, ray.InboundInput()); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if err := buf.PipeUntilEOF(timer, bodyReader, ray.InboundInput()); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return errors.New("failed to transport all TCP request").Base(err).Path("Shadowsocks", "Server") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return nil 
			 |