diff options
Diffstat (limited to 'msg_socket2/src/socket.rs')
-rw-r--r-- | msg_socket2/src/socket.rs | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/msg_socket2/src/socket.rs b/msg_socket2/src/socket.rs index bd1bc00..33b10ba 100644 --- a/msg_socket2/src/socket.rs +++ b/msg_socket2/src/socket.rs @@ -9,7 +9,7 @@ use sys_util::{net::UnixSeqpacket, ScmSocket}; use crate::{de, DeserializeWithFds, Error, Fd, FdSerializerImpl, SerializeWithFds}; -/// A Unix **SOCK_SEQPACKET** socket that can send and receive values +/// A Unix SOCK_SEQPACKET socket that can send and receive values /// consisting of binary data and file descriptors. #[derive(Debug)] pub struct Socket<Send, Recv> { @@ -29,14 +29,16 @@ impl<Send, Recv> Socket<Send, Recv> { impl<Send: SerializeWithFds, Recv> Socket<Send, Recv> { pub fn send(&self, value: Send) -> Result<(), Error> { let mut bytes: Vec<u8> = vec![]; - let mut fds: Vec<RawFd> = vec![]; - value.serialize(&mut Serializer::new(&mut bytes, DefaultOptions::new()))?; - value - .serialize_fds(&mut FdSerializerImpl { fds: &mut fds }) - .unwrap(); + let mut serializer = Serializer::new(&mut bytes, DefaultOptions::new()); + let mut fd_serializer = FdSerializerImpl { fds: vec![] }; - self.sock.send_with_fds(&[IoSlice::new(&bytes)], &fds)?; + value.serialize(&mut serializer)?; + value.serialize_fds(&mut fd_serializer).unwrap(); + + let fd_borrows: Vec<_> = fd_serializer.fds.iter().map(|x| x.as_raw_fd()).collect(); + self.sock + .send_with_fds(&[IoSlice::new(&bytes)], &fd_borrows)?; Ok(()) } |