diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs
index 5fb3c76fd..226228740 100644
--- a/src/ui_cm_interface.rs
+++ b/src/ui_cm_interface.rs
@@ -57,6 +57,7 @@ struct IpcTaskRunner<T: InvokeUiCM> {
     tx: mpsc::UnboundedSender<Data>,
     rx: mpsc::UnboundedReceiver<Data>,
     close: bool,
+    running: bool,
     conn_id: i32,
     #[cfg(windows)]
     file_transfer_enabled: bool,
@@ -218,6 +219,7 @@ pub fn switch_permission(id: i32, name: String, enabled: bool) {
     };
 }
 
+#[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))]
 #[inline]
 pub fn get_clients_state() -> String {
     let clients = CLIENTS.read().unwrap();
@@ -287,6 +289,7 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
             (_tx_clip, rx_clip) = unbounded_channel::<i32>();
         }
 
+        self.running = false;
         loop {
             tokio::select! {
                 res = self.stream.next() => {
@@ -305,6 +308,7 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
                                     {
                                         self.file_transfer_enabled = _file_transfer_enabled;
                                     }
+                                    self.running = true;
                                     break;
                                 }
                                 Data::Close => {
@@ -389,13 +393,13 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
             tx,
             rx,
             close: true,
+            running: true,
             conn_id: 0,
             #[cfg(windows)]
             file_transfer_enabled: false,
         };
 
-        task_runner.run().await;
-        if task_runner.conn_id > 0 {
+        while task_runner.running {
             task_runner.run().await;
         }
         if task_runner.conn_id > 0 {