From bb02ea3a20b503ed846d06995778cb2069aa4cb8 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Mon, 3 Feb 2025 18:21:03 +0800 Subject: [PATCH] Fix file descriptor IPC --- native/src/core/socket.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/native/src/core/socket.rs b/native/src/core/socket.rs index 98eff6911..7a7820e8b 100644 --- a/native/src/core/socket.rs +++ b/native/src/core/socket.rs @@ -146,7 +146,7 @@ pub trait UnixSocketExt { impl UnixSocketExt for UnixStream { fn send_fds(&mut self, fds: &[RawFd]) -> io::Result<()> { match fds.len() { - 0 => self.write_encodable(&-1)?, + 0 => self.write_pod(&0)?, len => { // 4k buffer is reasonable enough let mut buf = [0u8; 4096]; @@ -166,8 +166,16 @@ impl UnixSocketExt for UnixStream { let mut fd_count = 0; self.peek(bytes_of_mut(&mut fd_count))?; if fd_count < 1 { + // Actually consume the data + self.read_pod(&mut fd_count)?; return Ok(None); } + if fd_count > 1 { + warn!( + "Received unexpected number of fds: expected=1 actual={}", + fd_count + ); + } // 4k buffer is reasonable enough let mut buf = [0u8; 4096];