diff options
Diffstat (limited to 'karyons_net/src/transports/unix.rs')
-rw-r--r-- | karyons_net/src/transports/unix.rs | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/karyons_net/src/transports/unix.rs b/karyons_net/src/transports/unix.rs deleted file mode 100644 index c89832e..0000000 --- a/karyons_net/src/transports/unix.rs +++ /dev/null @@ -1,73 +0,0 @@ -use async_trait::async_trait; - -use smol::{ - io::{split, AsyncReadExt, AsyncWriteExt, ReadHalf, WriteHalf}, - lock::Mutex, - net::unix::{UnixListener, UnixStream}, -}; - -use crate::{connection::Connection, endpoint::Endpoint, listener::Listener, Result}; - -/// Unix domain socket implementations of the `Connection` trait. -pub struct UnixConn { - inner: UnixStream, - read: Mutex<ReadHalf<UnixStream>>, - write: Mutex<WriteHalf<UnixStream>>, -} - -impl UnixConn { - /// Creates a new UnixConn - pub fn new(conn: UnixStream) -> Self { - let (read, write) = split(conn.clone()); - Self { - inner: conn, - read: Mutex::new(read), - write: Mutex::new(write), - } - } -} - -#[async_trait] -impl Connection for UnixConn { - fn peer_endpoint(&self) -> Result<Endpoint> { - Ok(Endpoint::new_unix_addr(&self.inner.peer_addr()?)) - } - - fn local_endpoint(&self) -> Result<Endpoint> { - Ok(Endpoint::new_unix_addr(&self.inner.local_addr()?)) - } - - async fn recv(&self, buf: &mut [u8]) -> Result<usize> { - self.read.lock().await.read_exact(buf).await?; - Ok(buf.len()) - } - - async fn send(&self, buf: &[u8]) -> Result<usize> { - self.write.lock().await.write_all(buf).await?; - Ok(buf.len()) - } -} - -#[async_trait] -impl Listener for UnixListener { - fn local_endpoint(&self) -> Result<Endpoint> { - Ok(Endpoint::new_unix_addr(&self.local_addr()?)) - } - - async fn accept(&self) -> Result<Box<dyn Connection>> { - let (conn, _) = self.accept().await?; - Ok(Box::new(UnixConn::new(conn))) - } -} - -/// Connects to the given Unix socket path. -pub async fn dial_unix(path: &String) -> Result<UnixConn> { - let conn = UnixStream::connect(path).await?; - Ok(UnixConn::new(conn)) -} - -/// Listens on the given Unix socket path. -pub fn listen_unix(path: &String) -> Result<UnixListener> { - let listener = UnixListener::bind(path)?; - Ok(listener) -} |