diff options
author | Alyssa Ross <hi@alyssa.is> | 2020-03-26 09:03:39 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2020-06-15 09:37:19 +0000 |
commit | 353b1d9091b9095282463f36e26643506e2d2897 (patch) | |
tree | 714c613f9140cfebd45a3308ff2f035b0bb10958 /msg_socket/src/lib.rs | |
parent | e682f11cd0d063fe9111b13ab8ecff676592acdb (diff) | |
download | crosvm-353b1d9091b9095282463f36e26643506e2d2897.tar crosvm-353b1d9091b9095282463f36e26643506e2d2897.tar.gz crosvm-353b1d9091b9095282463f36e26643506e2d2897.tar.bz2 crosvm-353b1d9091b9095282463f36e26643506e2d2897.tar.lz crosvm-353b1d9091b9095282463f36e26643506e2d2897.tar.xz crosvm-353b1d9091b9095282463f36e26643506e2d2897.tar.zst crosvm-353b1d9091b9095282463f36e26643506e2d2897.zip |
use lifetimes in serialization to prevent closing
Diffstat (limited to 'msg_socket/src/lib.rs')
-rw-r--r-- | msg_socket/src/lib.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/msg_socket/src/lib.rs b/msg_socket/src/lib.rs index be86070..5dedac8 100644 --- a/msg_socket/src/lib.rs +++ b/msg_socket/src/lib.rs @@ -6,7 +6,7 @@ mod msg_on_socket; use std::io::{IoSlice, Result}; use std::marker::PhantomData; -use std::os::unix::io::{AsRawFd, RawFd}; +use std::os::unix::prelude::*; use std::pin::Pin; use std::task::{Context, Poll}; @@ -14,6 +14,7 @@ use futures::Stream; use libc::{EWOULDBLOCK, O_NONBLOCK}; use cros_async::add_read_waker; +use msg_socket2::{DeserializeWithFds, SerializeWithFds}; use sys_util::{ add_fd_flags, clear_fd_flags, error, handle_eintr, net::UnixSeqpacket, Error as SysError, ScmSocket, @@ -33,6 +34,8 @@ pub fn pair<Request: MsgOnSocket, Response: MsgOnSocket>( } /// Bidirection sock that support both send and recv. +#[derive(SerializeWithFds, DeserializeWithFds)] +#[msg_socket2(strategy = "AsRawFd")] pub struct MsgSocket<I: MsgOnSocket, O: MsgOnSocket> { sock: UnixSeqpacket, _i: PhantomData<I>, @@ -99,6 +102,12 @@ impl<I: MsgOnSocket, O: MsgOnSocket> AsRawFd for MsgSocket<I, O> { } } +impl<I: MsgOnSocket, O: MsgOnSocket> FromRawFd for MsgSocket<I, O> { + unsafe fn from_raw_fd(fd: RawFd) -> Self { + Self::new(UnixSeqpacket::from_raw_fd(fd)) + } +} + impl<M: MsgOnSocket> AsRef<UnixSeqpacket> for Sender<M> { fn as_ref(&self) -> &UnixSeqpacket { &self.sock |