net-kit
跨平台网络可达性监听库。对外仅暴露一个 Net 结构体,内部基于精简版
vibe-ready 运行时驱动 netwatch 网络监听。
特性
- 单一对外 API 结构体
Net,所有内部逻辑隔离在 inner 模块。
- 支持两种运行时启动方式:
start():使用库自带的运行时引擎。
start_with_tokio_rt(handle):复用开发者自己的 Tokio 运行时(该运行时由调用方保活,shutdown 不会关闭它)。
- 注册多个监听回调,回调在引擎回调线程池上触发,不阻塞监听任务。
- Windows 下基于
INetworkListManager 判定 Internet 可达性。
用法
use std::time::Duration;
use net_utils::{Net, NetworkStatus};
#[tokio::main]
async fn main() {
let net = Net::new();
net.start().await.expect("start failed");
let reachability = net
.local_network_reachability()
.expect("query reachability failed");
println!("reachability: {reachability:?}");
let handle = net
.register(Box::new(|status: NetworkStatus| {
println!("network status changed: {status:?}");
}))
.expect("register failed")
.expect("register requires start");
tokio::time::sleep(Duration::from_secs(5)).await;
net.unregister(handle).expect("unregister failed");
net.shutdown().expect("shutdown failed");
}
完整的可运行示例见 demo crate,可通过 cargo run -p demo 运行(演示启动/查询/监听回调中打印当前网络名称/关闭的完整流程)。
生命周期
start / start_with_tokio_rt:重复调用会被忽略;可在 shutdown 后再次调用以重建。
shutdown:停止监听任务并销毁引擎,释放所有 start 创建的资源;重复调用会被忽略。