From 9f3f77cb7206421da07296d1a056fc30399fbd70 Mon Sep 17 00:00:00 2001 From: Red Bear OS Date: Thu, 9 Jul 2026 18:43:18 +0300 Subject: [PATCH] ipcd: implement SO_SNDBUF/SO_RCVBUF socket options --- ipcd/src/uds/stream.rs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/ipcd/src/uds/stream.rs b/ipcd/src/uds/stream.rs index 81c846fda0..fe46550fd6 100644 --- a/ipcd/src/uds/stream.rs +++ b/ipcd/src/uds/stream.rs @@ -184,6 +184,8 @@ pub struct Socket { connection: Option, issued_token: Option, ucred: ucred, + sndbuf: i32, + rcvbuf: i32, } impl Socket { @@ -211,6 +213,8 @@ impl Socket { uid: ctx.uid as _, gid: ctx.gid as _, }, + sndbuf: 212992, // Linux default + rcvbuf: 212992, // Linux default } } @@ -659,8 +663,14 @@ impl<'sock> UdsStreamScheme<'sock> { Ok(value_slice.len()) } libc::SO_SNDBUF => { - // FIXME: implement - Ok(0) + let value = read_num::(value_slice)?; + socket.sndbuf = value; + Ok(value_slice.len()) + } + libc::SO_RCVBUF => { + let value = read_num::(value_slice)?; + socket.rcvbuf = value; + Ok(value_slice.len()) } _ => { eprintln!( @@ -688,6 +698,8 @@ impl<'sock> UdsStreamScheme<'sock> { payload[..value.len()].copy_from_slice(&value); Ok(value.len()) }; + let socket_rc = self.get_socket(id)?; + let socket = socket_rc.borrow(); match option { libc::SO_DOMAIN => write_value(&AF_UNIX.to_le_bytes()), libc::SO_PEERCRED => { @@ -701,9 +713,10 @@ impl<'sock> UdsStreamScheme<'sock> { }) } libc::SO_SNDBUF => { - //TODO: default value on Linux, should we use something else? - let value: libc::c_int = 212992; - write_value(&value.to_le_bytes()) + write_value(&socket.sndbuf.to_le_bytes()) + } + libc::SO_RCVBUF => { + write_value(&socket.rcvbuf.to_le_bytes()) } _ => { eprintln!(