use std::{io, net};
use socket2::Socket;
pub(crate) fn prep_socket(sock: Socket) -> io::Result<Socket> {
#[cfg(not(any(
target_os = "android",
target_os = "dragonfly",
target_os = "freebsd",
target_os = "fuchsia",
target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "netbsd",
target_os = "openbsd",
target_os = "espidf",
target_os = "vita",
)))]
sock.set_cloexec(true)?;
#[cfg(any(
target_os = "ios",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
))]
sock.set_nosigpipe(true)?;
sock.set_nonblocking(true)?;
Ok(sock)
}
pub(crate) fn close_socket(sock: Socket) {
ntex_rt::spawn_blocking(move || {
let _ = sock.shutdown(net::Shutdown::Both);
drop(sock);
});
}