From 56eac7294c706ffbe3bf9043b5f1d9b1bc2c4f5a Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 27 Jun 2023 15:20:32 +0800 Subject: [PATCH] reuseaddr in listen_any --- libs/hbb_common/src/tcp.rs | 14 +++++++++----- libs/hbb_common/src/udp.rs | 4 ++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libs/hbb_common/src/tcp.rs b/libs/hbb_common/src/tcp.rs index 296ad5701..351955825 100644 --- a/libs/hbb_common/src/tcp.rs +++ b/libs/hbb_common/src/tcp.rs @@ -72,8 +72,8 @@ fn new_socket(addr: std::net::SocketAddr, reuse: bool) -> Result ResultType { if let Ok(mut socket) = TcpSocket::new_v6() { #[cfg(unix)] { + socket.set_reuseport(true).ok(); + socket.set_reuseaddr(true).ok(); use std::os::unix::io::{FromRawFd, IntoRawFd}; let raw_fd = socket.into_raw_fd(); let sock2 = unsafe { socket2::Socket::from_raw_fd(raw_fd) }; @@ -283,9 +285,11 @@ pub async fn listen_any(port: u16) -> ResultType { } } } - let s = TcpSocket::new_v4()?; - s.bind(SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), port))?; - Ok(s.listen(DEFAULT_BACKLOG)?) + Ok(new_socket( + SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), port), + true, + )? + .listen(DEFAULT_BACKLOG)?) } impl Unpin for DynTcpStream {} diff --git a/libs/hbb_common/src/udp.rs b/libs/hbb_common/src/udp.rs index 55a82f8f7..68abd42df 100644 --- a/libs/hbb_common/src/udp.rs +++ b/libs/hbb_common/src/udp.rs @@ -24,8 +24,8 @@ fn new_socket(addr: SocketAddr, reuse: bool, buf_size: usize) -> Result