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 780
 [[package]]
781 781
 name = "hbbs"
782
-version = "1.1.11"
782
+version = "1.1.11-1"
783 783
 dependencies = [
784 784
  "async-speed-limit",
785 785
  "async-trait",

+ 1 - 1
Cargo.toml

@@ -1,6 +1,6 @@
1 1
 [package]
2 2
 name = "hbbs"
3
-version = "1.1.11"
3
+version = "1.1.11-1"
4 4
 authors = ["rustdesk <info@rustdesk.com>"]
5 5
 edition = "2021"
6 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 5
 rustdesk-server (1.1.11) UNRELEASED; urgency=medium
2 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 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 273
         #[cfg(unix)]
266 274
         {
267 275
             use std::os::unix::io::{FromRawFd, IntoRawFd};

+ 1 - 1
src/hbbr.rs

@@ -39,7 +39,7 @@ fn main() -> ResultType<()> {
39 39
         matches.value_of("port").unwrap_or(&port.to_string()),
40 40
         matches
41 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 44
     Ok(())
45 45
 }

+ 1 - 1
src/relay_server.rs

@@ -85,7 +85,7 @@ pub async fn start(port: &str, key: &str) -> ResultType<()> {
85 85
     let main_task = async move {
86 86
         loop {
87 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 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 1295
 async fn create_udp_listener(port: i32, rmem: usize) -> ResultType<FramedSocket> {
1296 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 1298
         log::debug!("listen on udp {:?}", s.local_addr());
1299 1299
         return Ok(s);
1300 1300
     }
1301 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 1303
     log::debug!("listen on udp {:?}", s.local_addr());
1304 1304
     Ok(s)
1305 1305
 }
1306 1306
 
1307 1307
 #[inline]
1308 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 1310
     log::debug!("listen on tcp {:?}", s.local_addr());
1311 1311
     Ok(s)
1312 1312
 }