Skip to content

Commit 5078a1f

Browse files
committed
reuse port, and revert hbbr -k
1 parent a22dacc commit 5078a1f

File tree

7 files changed

+20
-8
lines changed

7 files changed

+20
-8
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "hbbs"
3-
version = "1.1.11"
3+
version = "1.1.11-1"
44
authors = ["rustdesk <[email protected]>"]
55
edition = "2021"
66
build = "build.rs"

debian/changelog

+4
Original file line numberDiff line numberDiff line change
@@ -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+
15
rustdesk-server (1.1.11) UNRELEASED; urgency=medium
26
* change -k to default '-', so you need not to set -k any more
37

libs/hbb_common/src/tcp.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,16 @@ pub async fn new_listener<T: ToSocketAddrs>(addr: T, reuse: bool) -> ResultType<
260260
}
261261
}
262262

263-
pub async fn listen_any(port: u16) -> ResultType<TcpListener> {
263+
pub async fn listen_any(port: u16, reuse: bool) -> ResultType<TcpListener> {
264264
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+
}
265273
#[cfg(unix)]
266274
{
267275
use std::os::unix::io::{FromRawFd, IntoRawFd};

src/hbbr.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ fn main() -> ResultType<()> {
3939
matches.value_of("port").unwrap_or(&port.to_string()),
4040
matches
4141
.value_of("key")
42-
.unwrap_or(&std::env::var("KEY").unwrap_or("-".to_owned())),
42+
.unwrap_or(&std::env::var("KEY").unwrap_or_default()),
4343
)?;
4444
Ok(())
4545
}

src/relay_server.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ pub async fn start(port: &str, key: &str) -> ResultType<()> {
8585
let main_task = async move {
8686
loop {
8787
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;
8989
}
9090
};
9191
let listen_signal = crate::common::listen_signal();

src/rendezvous_server.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1294,19 +1294,19 @@ async fn send_rk_res(
12941294

12951295
async fn create_udp_listener(port: i32, rmem: usize) -> ResultType<FramedSocket> {
12961296
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 {
12981298
log::debug!("listen on udp {:?}", s.local_addr());
12991299
return Ok(s);
13001300
}
13011301
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?;
13031303
log::debug!("listen on udp {:?}", s.local_addr());
13041304
Ok(s)
13051305
}
13061306

13071307
#[inline]
13081308
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?;
13101310
log::debug!("listen on tcp {:?}", s.local_addr());
13111311
Ok(s)
13121312
}

0 commit comments

Comments
 (0)