mirror of
https://github.com/shadowsocks/shadowsocks-rust.git
synced 2026-11-06 08:14:07 +00:00
fix: macOS launch activate socket set nonblocking (#1451)
This commit is contained in:
@@ -216,7 +216,7 @@ impl DnsTcpServerBuilder {
|
||||
use tokio::net::TcpListener as TokioTcpListener;
|
||||
use crate::net::launch_activate_socket::get_launch_activate_tcp_listener;
|
||||
|
||||
let std_listener = get_launch_activate_tcp_listener(&launchd_socket_name)?;
|
||||
let std_listener = get_launch_activate_tcp_listener(&launchd_socket_name, true)?;
|
||||
let tokio_listener = TokioTcpListener::from_std(std_listener)?;
|
||||
TcpListener::from_listener(tokio_listener, self.context.accept_opts())?
|
||||
} else {
|
||||
@@ -389,7 +389,7 @@ impl DnsUdpServerBuilder {
|
||||
use tokio::net::UdpSocket as TokioUdpSocket;
|
||||
use crate::net::launch_activate_socket::get_launch_activate_udp_socket;
|
||||
|
||||
let std_socket = get_launch_activate_udp_socket(&launchd_socket_name)?;
|
||||
let std_socket = get_launch_activate_udp_socket(&launchd_socket_name, true)?;
|
||||
TokioUdpSocket::from_std(std_socket)?
|
||||
} else {
|
||||
create_standard_udp_listener(&self.context, &self.bind_addr).await?.into()
|
||||
|
||||
@@ -64,7 +64,7 @@ impl HttpBuilder {
|
||||
use tokio::net::TcpListener as TokioTcpListener;
|
||||
use crate::net::launch_activate_socket::get_launch_activate_tcp_listener;
|
||||
|
||||
let std_listener = get_launch_activate_tcp_listener(&launchd_socket_name)?;
|
||||
let std_listener = get_launch_activate_tcp_listener(&launchd_socket_name, true)?;
|
||||
let tokio_listener = TokioTcpListener::from_std(std_listener)?;
|
||||
TcpListener::from_listener(tokio_listener, self.context.accept_opts())?
|
||||
} else {
|
||||
|
||||
@@ -62,7 +62,7 @@ impl SocksTcpServerBuilder {
|
||||
use tokio::net::TcpListener as TokioTcpListener;
|
||||
use crate::net::launch_activate_socket::get_launch_activate_tcp_listener;
|
||||
|
||||
let std_listener = get_launch_activate_tcp_listener(&launchd_socket_name)?;
|
||||
let std_listener = get_launch_activate_tcp_listener(&launchd_socket_name, true)?;
|
||||
let tokio_listener = TokioTcpListener::from_std(std_listener)?;
|
||||
ShadowTcpListener::from_listener(tokio_listener, self.context.accept_opts())?
|
||||
} else {
|
||||
|
||||
@@ -71,7 +71,7 @@ impl Socks5UdpServerBuilder {
|
||||
use tokio::net::UdpSocket as TokioUdpSocket;
|
||||
use crate::net::launch_activate_socket::get_launch_activate_udp_socket;
|
||||
|
||||
let std_socket = get_launch_activate_udp_socket(&launchd_socket_name)?;
|
||||
let std_socket = get_launch_activate_udp_socket(&launchd_socket_name, true)?;
|
||||
TokioUdpSocket::from_std(std_socket)?
|
||||
} else {
|
||||
create_standard_udp_listener(&self.context, &self.client_config).await?.into()
|
||||
|
||||
@@ -52,7 +52,7 @@ impl TunnelTcpServerBuilder {
|
||||
use tokio::net::TcpListener as TokioTcpListener;
|
||||
use crate::net::launch_activate_socket::get_launch_activate_tcp_listener;
|
||||
|
||||
let std_listener = get_launch_activate_tcp_listener(&launchd_socket_name)?;
|
||||
let std_listener = get_launch_activate_tcp_listener(&launchd_socket_name, true)?;
|
||||
let tokio_listener = TokioTcpListener::from_std(std_listener)?;
|
||||
ShadowTcpListener::from_listener(tokio_listener, self.context.accept_opts())?
|
||||
} else {
|
||||
|
||||
@@ -61,7 +61,7 @@ impl TunnelUdpServerBuilder {
|
||||
use tokio::net::UdpSocket as TokioUdpSocket;
|
||||
use crate::net::launch_activate_socket::get_launch_activate_udp_socket;
|
||||
|
||||
let std_socket = get_launch_activate_udp_socket(&launchd_socket_name)?;
|
||||
let std_socket = get_launch_activate_udp_socket(&launchd_socket_name, true)?;
|
||||
TokioUdpSocket::from_std(std_socket)?
|
||||
} else {
|
||||
create_standard_udp_listener(&self.context, &self.client_config).await?.into()
|
||||
|
||||
@@ -14,15 +14,23 @@ use log::debug;
|
||||
use crate::sys::get_launch_activate_socket;
|
||||
|
||||
/// Get a macOS launch active socket as a `TcpListener`
|
||||
pub fn get_launch_activate_tcp_listener(name: &str) -> io::Result<TcpListener> {
|
||||
pub fn get_launch_activate_tcp_listener(name: &str, nonblock: bool) -> io::Result<TcpListener> {
|
||||
let fd = get_launch_activate_socket(name)?;
|
||||
debug!("created TCP listener from launch activate socket {}", fd);
|
||||
Ok(unsafe { TcpListener::from_raw_fd(fd) })
|
||||
let listener = unsafe { TcpListener::from_raw_fd(fd) };
|
||||
if nonblock {
|
||||
listener.set_nonblocking(true)?;
|
||||
}
|
||||
Ok(listener)
|
||||
}
|
||||
|
||||
/// Get a macOS launch activate socket as a `UdpSocket`
|
||||
pub fn get_launch_activate_udp_socket(name: &str) -> io::Result<UdpSocket> {
|
||||
pub fn get_launch_activate_udp_socket(name: &str, nonblock: bool) -> io::Result<UdpSocket> {
|
||||
let fd = get_launch_activate_socket(name)?;
|
||||
debug!("created UDP socket from launch activate socket {}", fd);
|
||||
Ok(unsafe { UdpSocket::from_raw_fd(fd) })
|
||||
let socket = unsafe { UdpSocket::from_raw_fd(fd) };
|
||||
if nonblock {
|
||||
socket.set_nonblocking(true)?;
|
||||
}
|
||||
Ok(socket)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user