2023-04-17 19:45:27 +00:00
|
|
|
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
2023-04-19 12:15:48 +00:00
|
|
|
use tokio::net::TcpListener;
|
2023-04-17 19:45:27 +00:00
|
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
2023-04-19 12:15:48 +00:00
|
|
|
env_logger::init();
|
|
|
|
|
let listener = TcpListener::bind("0.0.0.0:8080").await?;
|
|
|
|
|
log::info!("Start TCP server");
|
2023-04-17 19:45:27 +00:00
|
|
|
loop {
|
|
|
|
|
let (mut socket, _) = listener.accept().await?;
|
|
|
|
|
|
|
|
|
|
tokio::spawn(async move {
|
|
|
|
|
let mut buf = [0; 1024];
|
|
|
|
|
|
2023-04-19 12:15:48 +00:00
|
|
|
loop {
|
2023-04-17 19:45:27 +00:00
|
|
|
let n = match socket.read(&mut buf).await {
|
2023-04-19 12:15:48 +00:00
|
|
|
Ok(n) if n == 0 => {
|
|
|
|
|
log::info!("Receiving echo: {}", n);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Ok(n) => {
|
|
|
|
|
log::info!("Receiving echo: {}", n);
|
|
|
|
|
n
|
|
|
|
|
}
|
2023-04-17 19:45:27 +00:00
|
|
|
Err(e) => {
|
2023-04-18 08:50:02 +00:00
|
|
|
log::error!("failed to read from socket; err = {:?}", e);
|
2023-04-17 19:45:27 +00:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if let Err(e) = socket.write_all(&buf[0..n]).await {
|
2023-04-18 08:50:02 +00:00
|
|
|
log::error!("failed to write to socket; err = {:?}", e);
|
2023-04-17 19:45:27 +00:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|