Browse Source

reuse port, and revert hbbr `-k`

rustdesk 1 year ago
parent
commit
5078a1f797
7 changed files with 20 additions and 8 deletions
  1. 1 1
      Cargo.lock
  2. 1 1
      Cargo.toml
  3. 4 0
      debian/changelog
  4. 9 1
      libs/hbb_common/src/tcp.rs
  5. 1 1
      src/hbbr.rs
  6. 1 1
      src/relay_server.rs
  7. 3 3
      src/rendezvous_server.rs

+ 1 - 1
Cargo.lock

@@ -779,7 +779,7 @@ dependencies = [
779
 
779
 
780
 [[package]]
780
 [[package]]
781
 name = "hbbs"
781
 name = "hbbs"
782
-version = "1.1.11"
782
+version = "1.1.11-1"
783
 dependencies = [
783
 dependencies = [
784
  "async-speed-limit",
784
  "async-speed-limit",
785
  "async-trait",
785
  "async-trait",

+ 1 - 1
Cargo.toml

@@ -1,6 +1,6 @@
1
 [package]
1
 [package]
2
 name = "hbbs"
2
 name = "hbbs"
3
-version = "1.1.11"
3
+version = "1.1.11-1"
4
 authors = ["rustdesk <info@rustdesk.com>"]
4
 authors = ["rustdesk <info@rustdesk.com>"]
5
 edition = "2021"
5
 edition = "2021"
6
 build = "build.rs"
6
 build = "build.rs"

+ 4 - 0
debian/changelog

@@ -1,3 +1,7 @@
1
+rustdesk-server (1.1.11-1) UNRELEASED; urgency=medium
2
+  * set reuse port to make restart friendly
3
+  * revert hbbr `-k` to not ruin back-compatibility
4
+
1
 rustdesk-server (1.1.11) UNRELEASED; urgency=medium
5
 rustdesk-server (1.1.11) UNRELEASED; urgency=medium
2
   * change -k to default '-', so you need not to set -k any more
6
   * change -k to default '-', so you need not to set -k any more
3
 
7
 

+ 9 - 1
libs/hbb_common/src/tcp.rs

@@ -260,8 +260,16 @@ pub async fn new_listener<T: ToSocketAddrs>(addr: T, reuse: bool) -> ResultType<
260
     }
260
     }
261
 }
261
 }
262
 
262
 
263
-pub async fn listen_any(port: u16) -> ResultType<TcpListener> {
263
+pub async fn listen_any(port: u16, reuse: bool) -> ResultType<TcpListener> {
264
     if let Ok(mut socket) = TcpSocket::new_v6() {
264
     if let Ok(mut socket) = TcpSocket::new_v6() {
265
+        if reuse {
266
+            // windows has no reuse_port, but it's reuse_address
267
+            // almost equals to unix's reuse_port + reuse_address,
268
+            // though may introduce nondeterministic behavior
269
+            #[cfg(unix)]
270
+            socket.set_reuseport(true).ok();
271
+            socket.set_reuseaddr(true).ok();
272
+        }
265
         #[cfg(unix)]
273
         #[cfg(unix)]
266
         {
274
         {
267
             use std::os::unix::io::{FromRawFd, IntoRawFd};
275
             use std::os::unix::io::{FromRawFd, IntoRawFd};

+ 1 - 1
src/hbbr.rs

@@ -39,7 +39,7 @@ fn main() -> ResultType<()> {
39
         matches.value_of("port").unwrap_or(&port.to_string()),
39
         matches.value_of("port").unwrap_or(&port.to_string()),
40
         matches
40
         matches
41
             .value_of("key")
41
             .value_of("key")
42
-            .unwrap_or(&std::env::var("KEY").unwrap_or("-".to_owned())),
42
+            .unwrap_or(&std::env::var("KEY").unwrap_or_default()),
43
     )?;
43
     )?;
44
     Ok(())
44
     Ok(())
45
 }
45
 }

+ 1 - 1
src/relay_server.rs

@@ -85,7 +85,7 @@ pub async fn start(port: &str, key: &str) -> ResultType<()> {
85
     let main_task = async move {
85
     let main_task = async move {
86
         loop {
86
         loop {
87
             log::info!("Start");
87
             log::info!("Start");
88
-            io_loop(listen_any(port).await?, listen_any(port2).await?, &key).await;
88
+            io_loop(listen_any(port, true).await?, listen_any(port2, true).await?, &key).await;
89
         }
89
         }
90
     };
90
     };
91
     let listen_signal = crate::common::listen_signal();
91
     let listen_signal = crate::common::listen_signal();

+ 3 - 3
src/rendezvous_server.rs

@@ -1294,19 +1294,19 @@ async fn send_rk_res(
1294
 
1294
 
1295
 async fn create_udp_listener(port: i32, rmem: usize) -> ResultType<FramedSocket> {
1295
 async fn create_udp_listener(port: i32, rmem: usize) -> ResultType<FramedSocket> {
1296
     let addr = SocketAddr::new(IpAddr::V6(Ipv6Addr::UNSPECIFIED), port as _);
1296
     let addr = SocketAddr::new(IpAddr::V6(Ipv6Addr::UNSPECIFIED), port as _);
1297
-    if let Ok(s) = FramedSocket::new_reuse(&addr, false, rmem).await {
1297
+    if let Ok(s) = FramedSocket::new_reuse(&addr, true, rmem).await {
1298
         log::debug!("listen on udp {:?}", s.local_addr());
1298
         log::debug!("listen on udp {:?}", s.local_addr());
1299
         return Ok(s);
1299
         return Ok(s);
1300
     }
1300
     }
1301
     let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), port as _);
1301
     let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), port as _);
1302
-    let s = FramedSocket::new_reuse(&addr, false, rmem).await?;
1302
+    let s = FramedSocket::new_reuse(&addr, true, rmem).await?;
1303
     log::debug!("listen on udp {:?}", s.local_addr());
1303
     log::debug!("listen on udp {:?}", s.local_addr());
1304
     Ok(s)
1304
     Ok(s)
1305
 }
1305
 }
1306
 
1306
 
1307
 #[inline]
1307
 #[inline]
1308
 async fn create_tcp_listener(port: i32) -> ResultType<TcpListener> {
1308
 async fn create_tcp_listener(port: i32) -> ResultType<TcpListener> {
1309
-    let s = listen_any(port as _).await?;
1309
+    let s = listen_any(port as _, true).await?;
1310
     log::debug!("listen on tcp {:?}", s.local_addr());
1310
     log::debug!("listen on tcp {:?}", s.local_addr());
1311
     Ok(s)
1311
     Ok(s)
1312
 }
1312
 }