socket-api feature: make the daemon core embeddable in-process
Gate the unix-socket server, systemd activation, and the socket-serving run() behind a new default socket-api feature, with required-features on the binary. The core modules (daemon, store, transfer, discovery, meta) stay feature-free, so platforms without a daemon model (iOS — redoal ADR-0012) can embed Daemon directly via cargo check -p varde-daemon --no-default-features. Also cfg-gate the abstract-socket branch of sd_notify to Linux: abstract socket names don't exist elsewhere, and this was the one spot keeping varde-daemon from compiling on macOS at all. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -49,9 +49,19 @@ pub fn notify_ready() {
|
||||
let socket = std::os::unix::net::UnixDatagram::unbound()?;
|
||||
let bytes = path.as_encoded_bytes();
|
||||
if let Some(name) = bytes.strip_prefix(b"@") {
|
||||
use std::os::linux::net::SocketAddrExt;
|
||||
let addr = std::os::unix::net::SocketAddr::from_abstract_name(name)?;
|
||||
socket.send_to_addr(b"READY=1", &addr)?;
|
||||
// Abstract socket names are Linux-only, like systemd itself;
|
||||
// elsewhere an @-prefixed NOTIFY_SOCKET can only be ignored.
|
||||
#[cfg(target_os = "linux")]
|
||||
{
|
||||
use std::os::linux::net::SocketAddrExt;
|
||||
let addr = std::os::unix::net::SocketAddr::from_abstract_name(name)?;
|
||||
socket.send_to_addr(b"READY=1", &addr)?;
|
||||
}
|
||||
#[cfg(not(target_os = "linux"))]
|
||||
{
|
||||
let _ = name;
|
||||
debug!("abstract NOTIFY_SOCKET unsupported on this platform");
|
||||
}
|
||||
} else {
|
||||
socket.send_to(b"READY=1", &path)?;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user