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

tokio-socketcan

基于 tokio 的异步 Linux SocketCAN 套接字

7 个版本

0.3.1 2021年11月17日
0.3.0 2021年2月10日
0.2.0 2020年11月12日
0.1.3 2019年2月23日
0.1.1 2019年1月10日

#542异步

Download history 478/week @ 2024-03-14 423/week @ 2024-03-21 432/week @ 2024-03-28 502/week @ 2024-04-04 766/week @ 2024-04-11 642/week @ 2024-04-18 597/week @ 2024-04-25 699/week @ 2024-05-02 904/week @ 2024-05-09 1012/week @ 2024-05-16 867/week @ 2024-05-23 1164/week @ 2024-05-30 967/week @ 2024-06-06 993/week @ 2024-06-13 648/week @ 2024-06-20 751/week @ 2024-06-27

3,652 每月下载量
用于 4 crates

MIT 许可证

14KB
201

crates.io badge documentation Continuous integration

tokio-socketcan

SocketCANtokio 的支持,基于 socketcan crate

示例 echo 服务器

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(())
}

测试

由于它依赖于存在的虚拟 can 设备 vcan0,将测试集成到 CI 系统中并非易事。大多数 Linux 系统中添加一个虚拟 can 设备相对容易(需要 root 权限),但将 vcan 设备附加到 CI 的容器中似乎难以找到支持。

尽管如此,在本地运行测试的设置应该是简单的

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

依赖项

~5–14MB
~175K SLoC