embassy/tests/perf-server/src/main.rs
2023-06-06 02:50:57 +02:00

91 lines
2.5 KiB
Rust

use std::io::{Read, Write};
use std::net::{TcpListener, TcpStream};
use std::thread::spawn;
use std::time::Duration;
use log::info;
fn main() {
pretty_env_logger::init();
spawn(|| rx_listen());
spawn(|| rxtx_listen());
tx_listen();
}
fn tx_listen() {
info!("tx: listening on 0.0.0.0:4321");
let listener = TcpListener::bind("0.0.0.0:4321").unwrap();
loop {
let (socket, addr) = listener.accept().unwrap();
info!("tx: received connection from: {}", addr);
spawn(|| tx_conn(socket));
}
}
fn tx_conn(mut socket: TcpStream) {
socket.set_read_timeout(Some(Duration::from_secs(30))).unwrap();
socket.set_write_timeout(Some(Duration::from_secs(30))).unwrap();
let buf = [0; 1024];
loop {
if let Err(e) = socket.write_all(&buf) {
info!("tx: failed to write to socket; err = {:?}", e);
return;
}
}
}
fn rx_listen() {
info!("rx: listening on 0.0.0.0:4322");
let listener = TcpListener::bind("0.0.0.0:4322").unwrap();
loop {
let (socket, addr) = listener.accept().unwrap();
info!("rx: received connection from: {}", addr);
spawn(|| rx_conn(socket));
}
}
fn rx_conn(mut socket: TcpStream) {
socket.set_read_timeout(Some(Duration::from_secs(30))).unwrap();
socket.set_write_timeout(Some(Duration::from_secs(30))).unwrap();
let mut buf = [0; 1024];
loop {
if let Err(e) = socket.read_exact(&mut buf) {
info!("rx: failed to read from socket; err = {:?}", e);
return;
}
}
}
fn rxtx_listen() {
info!("rxtx: listening on 0.0.0.0:4323");
let listener = TcpListener::bind("0.0.0.0:4323").unwrap();
loop {
let (socket, addr) = listener.accept().unwrap();
info!("rxtx: received connection from: {}", addr);
spawn(|| rxtx_conn(socket));
}
}
fn rxtx_conn(mut socket: TcpStream) {
socket.set_read_timeout(Some(Duration::from_secs(30))).unwrap();
socket.set_write_timeout(Some(Duration::from_secs(30))).unwrap();
let mut buf = [0; 1024];
loop {
match socket.read(&mut buf) {
Ok(n) => {
if let Err(e) = socket.write_all(&buf[..n]) {
info!("rxtx: failed to write to socket; err = {:?}", e);
return;
}
}
Err(e) => {
info!("rxtx: failed to read from socket; err = {:?}", e);
return;
}
}
}
}