#[cfg(target_os = "linux")]
pub fn sd_notify(state: &str) {
use std::os::unix::ffi::OsStrExt;
use std::os::unix::net::UnixDatagram;
let Some(socket_path) = std::env::var_os("NOTIFY_SOCKET") else {
return;
};
let Ok(sock) = UnixDatagram::unbound() else {
return;
};
let path_bytes = socket_path.as_os_str().as_bytes();
if path_bytes.starts_with(b"@") {
use std::os::linux::net::SocketAddrExt;
use std::os::unix::net::SocketAddr;
if let Ok(addr) = SocketAddr::from_abstract_name(&path_bytes[1..]) {
let _ = sock.send_to_addr(state.as_bytes(), &addr);
}
} else {
let _ = sock.send_to(state.as_bytes(), &socket_path);
}
}
#[cfg(not(target_os = "linux"))]
pub fn sd_notify(_state: &str) {}