diff --git a/src/ipc.rs b/src/ipc.rs index 5be2c590c..341599d58 100644 --- a/src/ipc.rs +++ b/src/ipc.rs @@ -264,6 +264,7 @@ async fn handle(data: Data, stream: &mut Connection) { { RendezvousMediator::restart(); } + allow_err!(stream.send(&Data::Options(None)).await); } }, Data::NatType(_) => { @@ -497,11 +498,11 @@ pub fn set_option(key: &str, value: &str) { #[tokio::main(flavor = "current_thread")] pub async fn set_options(value: HashMap) -> ResultType<()> { - Config::set_options(value.clone()); - connect(1000, "") - .await? - .send(&Data::Options(Some(value))) - .await?; + let mut c = connect(1000, "").await?; + c.send(&Data::Options(Some(value.clone()))).await?; + // do not put below before connect, because we need to check should_exit + c.next_timeout(1000).await.ok(); + Config::set_options(value); Ok(()) } diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 727a11824..4e3384245 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -43,6 +43,7 @@ pub struct RendezvousMediator { impl RendezvousMediator { pub fn restart() { SHOULD_EXIT.store(true, Ordering::SeqCst); + log::info!("server restar"); } pub async fn start_all() { @@ -74,7 +75,6 @@ impl RendezvousMediator { SHOULD_EXIT.store(false, Ordering::SeqCst); for host in servers.clone() { let server = server.clone(); - let servers = servers.clone(); futs.push(tokio::spawn(async move { allow_err!(Self::start(server, host).await); // SHOULD_EXIT here is to ensure once one exits, the others also exit.