diff --git a/Cargo.lock b/Cargo.lock index 3bcfa3db..ab059ca3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1602,7 +1602,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.5.10", "system-configuration", "tokio", "tower-service", @@ -1797,7 +1797,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", + "socket2 0.5.10", "widestring", "windows-sys 0.48.0", "winreg 0.50.0", @@ -2703,7 +2703,7 @@ dependencies = [ "quinn-udp", "rustc-hash 2.1.1", "rustls", - "socket2", + "socket2 0.5.10", "thiserror 2.0.12", "tokio", "tracing", @@ -2740,7 +2740,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.5.10", "tracing", "windows-sys 0.59.0", ] @@ -3360,7 +3360,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "shadowsocks-crypto", - "socket2", + "socket2 0.6.0", "spin", "thiserror 2.0.12", "tokio", @@ -3476,7 +3476,7 @@ dependencies = [ "serde", "shadowsocks", "smoltcp", - "socket2", + "socket2 0.6.0", "spin", "thiserror 2.0.12", "tokio", @@ -3592,6 +3592,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "spin" version = "0.10.0" @@ -3880,7 +3890,7 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "slab", - "socket2", + "socket2 0.5.10", "tokio-macros", "windows-sys 0.52.0", ] @@ -3928,7 +3938,7 @@ dependencies = [ "log", "once_cell", "pin-project", - "socket2", + "socket2 0.5.10", "tokio", "windows-sys 0.52.0", ] @@ -4375,7 +4385,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/crates/shadowsocks-service/Cargo.toml b/crates/shadowsocks-service/Cargo.toml index 8523f88b..7f3da12a 100644 --- a/crates/shadowsocks-service/Cargo.toml +++ b/crates/shadowsocks-service/Cargo.toml @@ -157,7 +157,7 @@ tokio-rustls = { version = "0.26", optional = true, default-features = false, fe rustls-native-certs = { version = "0.8", optional = true } trait-variant = "0.1" -socket2 = { version = "0.5", features = ["all"] } +socket2 = { version = "0.6", features = ["all"] } libc = "~0.2.141" hyper = { version = "1.4", optional = true, features = ["full"] } diff --git a/crates/shadowsocks/Cargo.toml b/crates/shadowsocks/Cargo.toml index 75aa22dc..709ef40b 100644 --- a/crates/shadowsocks/Cargo.toml +++ b/crates/shadowsocks/Cargo.toml @@ -74,7 +74,7 @@ trait-variant = "0.1" dynosaur = "0.2.0" sealed = "0.6" -socket2 = { version = "0.5", features = ["all"] } +socket2 = { version = "0.6", features = ["all"] } tokio = { version = "1.9.0", features = [ "io-util", "macros", diff --git a/crates/shadowsocks/src/net/sys/unix/bsd/freebsd.rs b/crates/shadowsocks/src/net/sys/unix/bsd/freebsd.rs index da865d20..f111f326 100644 --- a/crates/shadowsocks/src/net/sys/unix/bsd/freebsd.rs +++ b/crates/shadowsocks/src/net/sys/unix/bsd/freebsd.rs @@ -11,7 +11,7 @@ use std::{ use log::{debug, error, warn}; use pin_project::pin_project; -use socket2::{Domain, Protocol, SockAddr, Socket, Type}; +use socket2::{Domain, Protocol, SockAddr, SockAddrStorage, Socket, Type}; use tokio::{ io::{AsyncRead, AsyncWrite, ReadBuf}, net::{TcpSocket, TcpStream as TokioTcpStream, UdpSocket}, @@ -277,8 +277,9 @@ static SUPPORT_BATCH_SEND_RECV_MSG: AtomicBool = AtomicBool::new(true); fn recvmsg_fallback(sock: &S, msg: &mut BatchRecvMessage<'_>) -> io::Result<()> { let mut hdr: libc::msghdr = unsafe { mem::zeroed() }; - let addr_storage: libc::sockaddr_storage = unsafe { mem::zeroed() }; - let addr_len = mem::size_of_val(&addr_storage) as libc::socklen_t; + let addr_storage = SockAddrStorage::zeroed(); + let addr_len = addr_storage.size_of() as libc::socklen_t; + let sock_addr = unsafe { SockAddr::new(addr_storage, addr_len) }; hdr.msg_name = sock_addr.as_ptr() as *mut _; hdr.msg_namelen = sock_addr.len() as _; @@ -313,8 +314,8 @@ pub fn batch_recvmsg(sock: &S, msgs: &mut [BatchRecvMessage<'_>]) -> for msg in msgs.iter_mut() { let mut hdr: libc::mmsghdr = unsafe { mem::zeroed() }; - let addr_storage: libc::sockaddr_storage = unsafe { mem::zeroed() }; - let addr_len = mem::size_of_val(&addr_storage) as libc::socklen_t; + let addr_storage = SockAddrStorage::zeroed(); + let addr_len = addr_storage.size_of() as libc::socklen_t; vec_msg_name.push(unsafe { SockAddr::new(addr_storage, addr_len) }); let sock_addr = vec_msg_name.last_mut().unwrap(); diff --git a/crates/shadowsocks/src/net/sys/unix/bsd/macos.rs b/crates/shadowsocks/src/net/sys/unix/bsd/macos.rs index 2d650203..9b1f277c 100644 --- a/crates/shadowsocks/src/net/sys/unix/bsd/macos.rs +++ b/crates/shadowsocks/src/net/sys/unix/bsd/macos.rs @@ -14,7 +14,7 @@ use std::{ use log::{debug, error, warn}; use pin_project::pin_project; -use socket2::{Domain, Protocol, SockAddr, Socket, Type}; +use socket2::{Domain, Protocol, SockAddr, SockAddrStorage, Socket, Type}; use tokio::{ io::{AsyncRead, AsyncWrite, Interest, ReadBuf}, net::{TcpSocket, TcpStream as TokioTcpStream, UdpSocket}, @@ -85,7 +85,7 @@ impl TcpStream { let raddr = SockAddr::from(addr); let mut endpoints: libc::sa_endpoints_t = mem::zeroed(); - endpoints.sae_dstaddr = raddr.as_ptr(); + endpoints.sae_dstaddr = raddr.as_ptr() as *const _; endpoints.sae_dstaddrlen = raddr.len(); let ret = libc::connectx( @@ -428,8 +428,9 @@ static SUPPORT_BATCH_SEND_RECV_MSG: AtomicBool = AtomicBool::new(true); fn recvmsg_fallback(sock: &S, msg: &mut BatchRecvMessage<'_>) -> io::Result<()> { let mut hdr: libc::msghdr = unsafe { mem::zeroed() }; - let addr_storage: libc::sockaddr_storage = unsafe { mem::zeroed() }; - let addr_len = mem::size_of_val(&addr_storage) as libc::socklen_t; + let addr_storage = SockAddrStorage::zeroed(); + let addr_len = addr_storage.size_of() as libc::socklen_t; + let sock_addr = unsafe { SockAddr::new(addr_storage, addr_len) }; hdr.msg_name = sock_addr.as_ptr() as *mut _; hdr.msg_namelen = sock_addr.len() as _; @@ -464,8 +465,8 @@ pub fn batch_recvmsg(sock: &S, msgs: &mut [BatchRecvMessage<'_>]) -> for msg in msgs.iter_mut() { let mut hdr: msghdr_x = unsafe { mem::zeroed() }; - let addr_storage: libc::sockaddr_storage = unsafe { mem::zeroed() }; - let addr_len = mem::size_of_val(&addr_storage) as libc::socklen_t; + let addr_storage = SockAddrStorage::zeroed(); + let addr_len = addr_storage.size_of() as libc::socklen_t; vec_msg_name.push(unsafe { SockAddr::new(addr_storage, addr_len) }); let sock_addr = vec_msg_name.last_mut().unwrap(); diff --git a/crates/shadowsocks/src/net/sys/unix/linux/mod.rs b/crates/shadowsocks/src/net/sys/unix/linux/mod.rs index 9ad71ba5..92b24fc7 100644 --- a/crates/shadowsocks/src/net/sys/unix/linux/mod.rs +++ b/crates/shadowsocks/src/net/sys/unix/linux/mod.rs @@ -11,7 +11,7 @@ use std::{ use log::{debug, error, warn}; use pin_project::pin_project; -use socket2::{Domain, Protocol, SockAddr, Socket, Type}; +use socket2::{Domain, Protocol, SockAddr, SockAddrStorage, Socket, Type}; use tokio::{ io::{AsyncRead, AsyncWrite, ReadBuf}, net::{TcpSocket, TcpStream as TokioTcpStream, UdpSocket}, @@ -439,8 +439,9 @@ static SUPPORT_BATCH_SEND_RECV_MSG: AtomicBool = AtomicBool::new(true); fn recvmsg_fallback(sock: &S, msg: &mut BatchRecvMessage<'_>) -> io::Result<()> { let mut hdr: libc::msghdr = unsafe { mem::zeroed() }; - let addr_storage: libc::sockaddr_storage = unsafe { mem::zeroed() }; - let addr_len = mem::size_of_val(&addr_storage) as libc::socklen_t; + let addr_storage = SockAddrStorage::zeroed(); + let addr_len = addr_storage.size_of() as libc::socklen_t; + let sock_addr = unsafe { SockAddr::new(addr_storage, addr_len) }; hdr.msg_name = sock_addr.as_ptr() as *mut _; hdr.msg_namelen = sock_addr.len() as _; @@ -475,8 +476,8 @@ pub fn batch_recvmsg(sock: &S, msgs: &mut [BatchRecvMessage<'_>]) -> for msg in msgs.iter_mut() { let mut hdr: libc::mmsghdr = unsafe { mem::zeroed() }; - let addr_storage: libc::sockaddr_storage = unsafe { mem::zeroed() }; - let addr_len = mem::size_of_val(&addr_storage) as libc::socklen_t; + let addr_storage = SockAddrStorage::zeroed(); + let addr_len = addr_storage.size_of() as libc::socklen_t; vec_msg_name.push(unsafe { SockAddr::new(addr_storage, addr_len) }); let sock_addr = vec_msg_name.last_mut().unwrap(); diff --git a/crates/shadowsocks/src/net/sys/unix/mod.rs b/crates/shadowsocks/src/net/sys/unix/mod.rs index 03642b0d..f86cdee0 100644 --- a/crates/shadowsocks/src/net/sys/unix/mod.rs +++ b/crates/shadowsocks/src/net/sys/unix/mod.rs @@ -112,7 +112,7 @@ pub fn set_common_sockopt_after_connect(stream: &S, opts: &ConnectOp fn set_common_sockopt_after_connect_impl(socket: &Socket, opts: &ConnectOpts) -> io::Result<()> { if opts.tcp.nodelay { - socket.set_nodelay(true)?; + socket.set_tcp_nodelay(true)?; } set_tcp_keepalive(socket, &opts.tcp)?; @@ -133,7 +133,7 @@ fn set_common_sockopt_after_accept_impl(socket: &Socket, opts: &AcceptOpts) -> i socket.set_recv_buffer_size(buf_size as usize)?; } - socket.set_nodelay(opts.tcp.nodelay)?; + socket.set_tcp_nodelay(opts.tcp.nodelay)?; set_tcp_keepalive(socket, &opts.tcp)?; diff --git a/crates/shadowsocks/src/net/sys/windows/mod.rs b/crates/shadowsocks/src/net/sys/windows/mod.rs index ee3b85cc..a3fba022 100644 --- a/crates/shadowsocks/src/net/sys/windows/mod.rs +++ b/crates/shadowsocks/src/net/sys/windows/mod.rs @@ -526,7 +526,7 @@ pub fn set_common_sockopt_after_connect(stream: &S, opts: &Conne fn set_common_sockopt_after_connect_impl(socket: &Socket, opts: &ConnectOpts) -> io::Result<()> { if opts.tcp.nodelay { - socket.set_nodelay(true)?; + socket.set_tcp_nodelay(true)?; } if let Some(intv) = opts.tcp.keepalive { @@ -550,7 +550,7 @@ fn set_common_sockopt_after_accept_impl(socket: &Socket, opts: &AcceptOpts) -> i socket.set_recv_buffer_size(buf_size as usize)?; } - socket.set_nodelay(opts.tcp.nodelay)?; + socket.set_tcp_nodelay(opts.tcp.nodelay)?; if let Some(intv) = opts.tcp.keepalive { let keepalive = TcpKeepalive::new().with_time(intv).with_interval(intv);