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 |
#684 in Asynchronous
818 downloads per month
Used in suricata-ipc
13KB
254 lines
packet-ipc
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
~6–15MB
~229K SLoC