14 breaking releases

0.15.0 Dec 29, 2020
0.14.0 Sep 24, 2020
0.13.0 Jul 2, 2020
0.9.0 Feb 21, 2020
0.4.0 Mar 22, 2019

#1260 in Network programming

Download history 103/week @ 2023-11-30 223/week @ 2023-12-07 122/week @ 2023-12-14 110/week @ 2023-12-21 221/week @ 2023-12-28 123/week @ 2024-01-04 308/week @ 2024-01-11 218/week @ 2024-01-18 128/week @ 2024-01-25 132/week @ 2024-02-01 468/week @ 2024-02-08 296/week @ 2024-02-15 317/week @ 2024-02-22 360/week @ 2024-02-29 234/week @ 2024-03-07 205/week @ 2024-03-14

1,199 downloads per month
Used in suricata-ipc

MIT license

13KB
254 lines

packet-ipc

build status crates.io version docs.rs docs MIT licensed

Library to share packets between processes using servo's ipc-channel.

Attempts to be as efficient as possible while still allowing packets to be used with C FFI.

A packet is defined for this library as any structure which implements AsIpcPacket.

Usage

A server must be created before a client, since the client will use the server's name to connect.

To start, create a server, and accept a connection:

let server = Server::new().expect("Failed to build server");
let server_name = server.name.clone();
let connection = futures::spawn(server.accept()).expect("No connection formed");

Once a server is created, you can then use the server's name to create a client:

let client = Client::new(server_name.clone()).expect("Failed to connect");

At this point, you can send packets to the client:

connection.send(Some(packets)).expect("Failed to send");

or tell the client you are done sending packets:

connection.send(None).expect("Failed to send");

and close the connection:

connection.close();

The client is immediately available for use, and can receive packets using:

let opt_packets = client.receive_packets(size).expect("Failed to receive packets");
if Some(packets) = opt_packets {
    process_packets(packets);
} //else server is closed

Streaming Packets to Client

Once a connection is formed, it can be used with a stream of packets:

let stream_result = packets_stream.transfer_ipc(connection).collect().wait();

Dependencies

~5–16MB
~221K SLoC