From 8235599e9767eda06472998e1300c103ed950744 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 27 Dec 2024 16:02:12 +0000 Subject: [PATCH] sys::socket adding sockopt::LingerSec for Apple targets. ``` ``` --- src/sys/socket/sockopt.rs | 10 ++++++++++ test/sys/test_sockopt.rs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/sys/socket/sockopt.rs b/src/sys/socket/sockopt.rs index 7ec4f68f07..97001dc62e 100644 --- a/src/sys/socket/sockopt.rs +++ b/src/sys/socket/sockopt.rs @@ -372,6 +372,16 @@ sockopt_impl!( libc::SO_LINGER, libc::linger ); +#[cfg(apple_targets)] +sockopt_impl!( + /// `SO_LINGER_SEC` on apple targets is the genuine equivalent to + /// other platforms `SO_LINGER`. Indeed, the latter uses ticks. + LingerSec, + Both, + libc::SOL_SOCKET, + libc::SO_LINGER_SEC, + libc::linger +); #[cfg(feature = "net")] sockopt_impl!( #[cfg_attr(docsrs, doc(cfg(feature = "net")))] diff --git a/test/sys/test_sockopt.rs b/test/sys/test_sockopt.rs index b40fb08d08..cae8e750f7 100644 --- a/test/sys/test_sockopt.rs +++ b/test/sys/test_sockopt.rs @@ -1097,6 +1097,36 @@ mod sockopt_impl { assert_eq!(get_linger.l_linger, set_linger.l_linger); } + #[cfg(apple_targets)] + sockopt_impl!( + LingerSec, + Both, + libc::SOL_SOCKET, + libc::SO_LINGER_SEC, + libc::linger + ); + + #[cfg(apple_targets)] + #[test] + fn test_linger_sec() { + let fd = socket( + AddressFamily::Inet, + SockType::Stream, + SockFlag::empty(), + None, + ) + .unwrap(); + + let set_linger = libc::linger { + l_onoff: 1, + l_linger: 1, + }; + setsockopt(&fd, LingerSec, &set_linger).unwrap(); + + let get_linger = getsockopt(&fd, Linger).unwrap(); + assert_eq!(get_linger.l_linger, set_linger.l_linger * 100); + } + sockopt_impl!(KeepAlive, Both, libc::SOL_SOCKET, libc::SO_KEEPALIVE, bool); #[test]