91 lines
2.5 KiB
Rust
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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|