#socket-can #tokio #linux #sockets #async #future #stream

tokio-socketcan

Asynchronous Linux SocketCAN sockets with tokio

7 releases

0.3.1 Nov 17, 2021
0.3.0 Feb 10, 2021
0.2.0 Nov 12, 2020
0.1.3 Feb 23, 2019
0.1.1 Jan 10, 2019

#513 in Asynchronous

Download history 684/week @ 2024-06-16 708/week @ 2024-06-23 877/week @ 2024-06-30 810/week @ 2024-07-07 774/week @ 2024-07-14 779/week @ 2024-07-21 1031/week @ 2024-07-28 702/week @ 2024-08-04 907/week @ 2024-08-11 1000/week @ 2024-08-18 1185/week @ 2024-08-25 1091/week @ 2024-09-01 1434/week @ 2024-09-08 1119/week @ 2024-09-15 1414/week @ 2024-09-22 1322/week @ 2024-09-29

5,326 downloads per month
Used in 4 crates

MIT license

14KB
201 lines

crates.io badge documentation Continuous integration

tokio-socketcan

SocketCAN support for tokio based on the socketcan crate.

Example echo server

use futures_util::stream::StreamExt;
use tokio_socketcan::{CANSocket, Error};

#[tokio::main]
async fn main() -> Result<(), Error> {
    let mut socket_rx = CANSocket::open("vcan0")?;
    let socket_tx = CANSocket::open("vcan0")?;
    while let Some(Ok(frame)) = socket_rx.next().await {
        socket_tx.write_frame(frame)?.await?;
    }
    Ok(())
}

Testing

Integrating the test into a CI system is non-trivial as it relies on a vcan0 virtual can device existing. Adding one to most linux systems is pretty easy with root access but attaching a vcan device to a container for CI seems difficult to find support for.

To run the tests locally, though, setup should be simple:

sudo modprobe vcan
sudo ip link add vcan0 type vcan
sudo ip link set vcan0 up
cargo test

Dependencies

~6–18MB
~179K SLoC