commit 40ae833af3411497de25e68cab0222a3256ec0be
parent 8dbe90e0ad291d83c56e6a1a7081701dfcba22f8
Author: Daniel Barlow <dan@telent.net>
Date: Thu, 30 Apr 2026 20:40:02 +0100
client: bind socket to abstract name before connect
it seems that the server can't sendto() an unbound peer
Diffstat:
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/bin/luac.rs b/src/bin/luac.rs
@@ -4,11 +4,12 @@ use std::{
os::unix::net::{
UnixDatagram,
SocketAncillary,
- AncillaryData
+ SocketAddr
},
env,
io::IoSlice
};
+use std::os::linux::net::SocketAddrExt;
fn main() {
let mut payload = "".to_string();
@@ -22,7 +23,11 @@ fn main() {
let Ok(sock_path) = env::var("LUAD_SOCKET_PATH") else {
panic!("need to set LUAD_SOCKET_PATH env var");
};
- let sock = UnixDatagram::unbound().expect("socket");
+ let pid = std::process::id();
+
+ let addr = SocketAddr::from_abstract_name(pid.to_le_bytes()).expect("addr");
+ let sock = UnixDatagram::bind_addr(&addr).expect("bind");
+
sock.connect(sock_path).expect("connect");
let fds = [0, 1, 2];
let mut ancillary_buffer = [0; 128];