Crate tipsy

Source
Expand description

Tokio IPC transport. Under the hood uses Unix Domain Sockets for Linux/Mac and Named Pipes for Windows.

§tipsy

crates.io docs.rs Dependency Status license CI codecov GitHub repo size Lines of Code

This is a fork of parity-tokio-ipc.

tipsy is a library for cross-platform async IPC using Tokio. It utilizes unix sockets on UNIX (via tokio::net::UnixStream) and named pipes on windows (via tokio::net::windows::named_pipe).

§Server

use futures_util::stream::StreamExt;
use std::error::Error;
use tipsy::{Endpoint, OnConflict, ServerId};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    Endpoint::new(ServerId::new("my-server"), OnConflict::Overwrite)?
        .incoming()?
        .for_each(|conn| async {
            match conn {
                Ok(stream) => println!("Got connection!"),
                Err(e) => eprintln!("Error when receiving connection: {:?}", e),
            }
        });
    Ok(())
}

§Client

use std::error::Error;
use tipsy::{Endpoint, ServerId};
use tokio::io::AsyncWriteExt;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let mut client = Endpoint::connect(ServerId::new("my-server")).await?;
    client.write_all(b"ping").await?;
    Ok(())
}

§Examples

See examples.

§Supported Rust Versions

The MSRV is currently 1.75.0.

Structs§

Connection
IPC connection.
Endpoint
IPC endpoint.
IpcStream
Stream of incoming connections.
SecurityAttributes
Permissions and ownership for the IPC connection
ServerId
Cross-platform representation of an IPC connection path.

Enums§

OnConflict
How to proceed when the socket path already exists

Traits§

IntoIpcPath
Path used for an IPC client or server.