#[test]
fn test_sockopts() {
use rustix::net::{AddressFamily, Protocol, SocketType};
use std::time::Duration;
let s =
rustix::net::socket(AddressFamily::INET, SocketType::STREAM, Protocol::default()).unwrap();
assert!(
rustix::net::sockopt::get_socket_timeout(&s, rustix::net::sockopt::Timeout::Recv)
.unwrap()
.is_none()
);
assert_eq!(
rustix::net::sockopt::get_socket_type(&s).unwrap(),
SocketType::STREAM
);
#[cfg(not(windows))]
assert_eq!(
rustix::net::sockopt::get_socket_broadcast(&s).unwrap(),
false
);
assert!(rustix::net::sockopt::get_socket_linger(&s)
.unwrap()
.is_none());
#[cfg(any(target_os = "android", target_os = "linux"))]
assert_eq!(
rustix::net::sockopt::get_socket_passcred(&s).unwrap(),
false
);
assert_ne!(rustix::net::sockopt::get_ip_ttl(&s).unwrap(), 0);
assert_ne!(rustix::net::sockopt::get_ip_ttl(&s).unwrap(), 77);
#[cfg(not(any(
windows,
target_os = "dragonfly",
target_os = "ios",
target_os = "freebsd",
target_os = "macos",
target_os = "netbsd",
target_os = "openbsd"
)))]
assert_eq!(
rustix::net::sockopt::get_ip_multicast_loop(&s).unwrap(),
true
);
#[cfg(not(any(
windows,
target_os = "dragonfly",
target_os = "ios",
target_os = "freebsd",
target_os = "macos",
target_os = "netbsd",
target_os = "openbsd"
)))]
assert_eq!(rustix::net::sockopt::get_ip_multicast_ttl(&s).unwrap(), 1);
assert_eq!(rustix::net::sockopt::get_tcp_nodelay(&s).unwrap(), false);
rustix::net::sockopt::set_socket_timeout(
&s,
rustix::net::sockopt::Timeout::Recv,
Some(Duration::new(1, 1)),
)
.unwrap();
if cfg!(not(target_os = "freebsd")) {
assert!(
rustix::net::sockopt::get_socket_timeout(&s, rustix::net::sockopt::Timeout::Recv)
.unwrap()
.unwrap()
>= Duration::new(1, 1)
);
} else {
assert!(
rustix::net::sockopt::get_socket_timeout(&s, rustix::net::sockopt::Timeout::Recv)
.unwrap()
.unwrap()
>= Duration::new(1, 0)
);
}
#[cfg(not(windows))]
{
rustix::net::sockopt::set_socket_broadcast(&s, true).unwrap();
#[cfg(not(any(
target_os = "dragonfly",
target_os = "ios",
target_os = "freebsd",
target_os = "macos",
target_os = "netbsd",
target_os = "openbsd"
)))]
assert_eq!(
rustix::net::sockopt::get_socket_broadcast(&s).unwrap(),
true
);
}
rustix::net::sockopt::set_socket_linger(&s, Some(Duration::new(1, 1))).unwrap();
assert!(
dbg!(rustix::net::sockopt::get_socket_linger(&s)
.unwrap()
.unwrap())
>= Duration::new(1, 1)
);
#[cfg(any(target_os = "android", target_os = "linux"))]
{
rustix::net::sockopt::set_socket_passcred(&s, true).unwrap();
assert_eq!(rustix::net::sockopt::get_socket_passcred(&s).unwrap(), true);
}
rustix::net::sockopt::set_ip_ttl(&s, 77).unwrap();
assert_eq!(rustix::net::sockopt::get_ip_ttl(&s).unwrap(), 77);
#[cfg(not(any(
windows,
target_os = "dragonfly",
target_os = "ios",
target_os = "freebsd",
target_os = "macos",
target_os = "netbsd",
target_os = "openbsd"
)))]
{
rustix::net::sockopt::set_ip_multicast_loop(&s, false).unwrap();
assert_eq!(
rustix::net::sockopt::get_ip_multicast_loop(&s).unwrap(),
false
);
}
rustix::net::sockopt::set_tcp_nodelay(&s, true).unwrap();
assert_eq!(rustix::net::sockopt::get_tcp_nodelay(&s).unwrap(), true);
}