From 10620bdf21fe0cd1b6faf0aff0d36416ed3dd442 Mon Sep 17 00:00:00 2001 From: Val Packett Date: Fri, 10 Apr 2026 01:18:40 -0300 Subject: [PATCH] util: rust: Add a way to create a Tube from an existing OwnedFd Signed-off-by: Val Packett Signed-off-by: Gurchetan Singh Reviewed-by: David Gilhooley Part-of: --- src/util/rust/sys/linux/tube.rs | 13 +++++++++++++ src/util/rust/sys/stub/tube.rs | 8 ++++++++ src/util/rust/sys/windows/tube.rs | 8 ++++++++ 3 files changed, 29 insertions(+) diff --git a/src/util/rust/sys/linux/tube.rs b/src/util/rust/sys/linux/tube.rs index 29e549a1f81..a7e68bb02f0 100644 --- a/src/util/rust/sys/linux/tube.rs +++ b/src/util/rust/sys/linux/tube.rs @@ -19,6 +19,7 @@ use rustix::net::listen; use rustix::net::recvmsg; use rustix::net::sendmsg; use rustix::net::socket_with; +use rustix::net::sockopt::socket_type; use rustix::net::AddressFamily; use rustix::net::RecvAncillaryBuffer; use rustix::net::RecvAncillaryMessage; @@ -43,6 +44,18 @@ pub struct Tube { socket: OwnedDescriptor, } +impl TryFrom for Tube { + type Error = MesaError; + + fn try_from(socket: OwnedDescriptor) -> Result { + let ty = socket_type(&socket)?; + match ty { + SocketType::SEQPACKET | SocketType::STREAM => Ok(Tube { socket }), + _ => Err(MesaError::Unsupported), + } + } +} + impl TryFrom for TubeType { type Error = std::io::Error; diff --git a/src/util/rust/sys/stub/tube.rs b/src/util/rust/sys/stub/tube.rs index 21420c83476..91a9f9f18e6 100644 --- a/src/util/rust/sys/stub/tube.rs +++ b/src/util/rust/sys/stub/tube.rs @@ -12,6 +12,14 @@ use crate::TubeType; pub struct Tube; pub struct Listener; +impl TryFrom for Tube { + type Error = MesaError; + + fn try_from(_socket: OwnedDescriptor) -> Result { + Err(MesaError::Unsupported) + } +} + impl Tube { pub fn new>(_path: P, _kind: TubeType) -> MesaResult { Err(MesaError::Unsupported) diff --git a/src/util/rust/sys/windows/tube.rs b/src/util/rust/sys/windows/tube.rs index 21420c83476..91a9f9f18e6 100644 --- a/src/util/rust/sys/windows/tube.rs +++ b/src/util/rust/sys/windows/tube.rs @@ -12,6 +12,14 @@ use crate::TubeType; pub struct Tube; pub struct Listener; +impl TryFrom for Tube { + type Error = MesaError; + + fn try_from(_socket: OwnedDescriptor) -> Result { + Err(MesaError::Unsupported) + } +} + impl Tube { pub fn new>(_path: P, _kind: TubeType) -> MesaResult { Err(MesaError::Unsupported)