Better error messages

This commit is contained in:
Lucas Schumacher 2023-12-30 11:15:44 -05:00
parent 71e412f3be
commit 8513bafad6
2 changed files with 23 additions and 8 deletions

2
.gitignore vendored
View File

@ -1 +1,3 @@
/target /target
perf.data
perf.data.old

View File

@ -1,11 +1,12 @@
use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::TcpListener; use tokio::net::TcpListener;
use tokio::sync::broadcast; use tokio::sync::broadcast::{self, error::RecvError::Lagged};
#[tokio::main] #[tokio::main]
async fn main() -> std::io::Result<()> { async fn main() -> std::io::Result<()> {
let (tx, _rx) = broadcast::channel(128); let (tx, _rx) = broadcast::channel(256);
let listener = TcpListener::bind("127.0.0.1:8001").await?; let listener = TcpListener::bind("127.0.0.1:8001").await?;
loop { loop {
let (stream, addr) = listener.accept().await?; let (stream, addr) = listener.accept().await?;
println!("{addr} Connected"); println!("{addr} Connected");
@ -21,20 +22,32 @@ async fn main() -> std::io::Result<()> {
} }
let data = buffer[..len].to_vec(); let data = buffer[..len].to_vec();
if tx_bus.send(data).is_err() { if tx_bus.send(data).is_err() {
println!("{} tcp reader bus error", &addr);
break; break;
} }
} }
println!("{} tcp reader exit", &addr);
}); });
tokio::task::spawn(async move { tokio::task::spawn(async move {
while let Ok(data) = rx_bus.recv().await { loop {
let owned_data = data.to_vec(); match rx_bus.recv().await {
if tx_tcp.write_all(&owned_data).await.is_err() { Ok(data) => {
break; if let Err(e) = tx_tcp.write_all(&data).await {
println!("{} tcp writer error {}", &addr, e);
break;
}
}
Err(Lagged(i)) => {
eprintln!("Warning: {} dropped {} packets", &addr, i);
}
Err(e) => {
eprintln!("rx bus error: {}", e);
break;
}
} }
} }
println!("{} tcp writer exit", &addr);
}); });
} }
//Ok(())
} }