217935ec95
UdsStreamScheme::getsockopt held an outer socket_rc.borrow() across the whole option match. The SO_PEERCRED branch calls get_connected_peer(id), which itself does borrow_mut() on the same socket — a RefCell double-borrow that panicked ipcd and took the UDS scheme down (observed in QEMU boot logs as ipcd crash at uds/stream.rs plus tokio UnixStream::pair / 'failed to create UnixStream' failures from clients calling getsockopt(SO_PEERCRED)). Borrow only inside the branches that read socket fields (SNDBUF/RCVBUF); the SO_PEERCRED branch now runs without an outer borrow held. (Change found as uncommitted work in the fork; committing to unblock the clean-fork build gate and to preserve the fix.)
ipcd
A userspace daemon for interprocess communication.
Usage
See the examples folder.
Simply open chan:<name> with O_CREAT where <name> is any name you'd like to create a listener.
This listener can accept clients by calling dup("listen").
Open chan:<name> without O_CREAT to connect. Now you can read and write between both streams.