Command-line control over buffer sizes

This commit is contained in:
Tony Garnock-Jones 2020-05-18 11:37:54 +02:00
parent 6e4373fcf2
commit 461b12344c
1 changed files with 12 additions and 4 deletions

View File

@ -13,10 +13,15 @@ use tungstenite::Message;
use structopt::StructOpt;
#[derive(StructOpt)]
#[derive(Clone, StructOpt)]
struct Cli {
#[structopt(short = "p", long = "port", default_value = "8001")]
ports: Vec<u16>,
#[structopt(long)]
recv_buffer_size: Option<usize>,
#[structopt(long)]
send_buffer_size: Option<usize>,
}
type UnitAsyncResult = Result<(), std::io::Error>;
@ -99,7 +104,7 @@ async fn run_connection(connid: ConnId,
Ok(())
}
async fn run_listener(spaces: Arc<Mutex<spaces::Spaces>>, port: u16) -> UnitAsyncResult {
async fn run_listener(spaces: Arc<Mutex<spaces::Spaces>>, port: u16, args: Cli) -> UnitAsyncResult {
let mut listener = TcpListener::bind(format!("0.0.0.0:{}", port)).await?;
println!("Listening on port {}", port);
let mut id = port as u64 + 100000000000000;
@ -108,6 +113,8 @@ async fn run_listener(spaces: Arc<Mutex<spaces::Spaces>>, port: u16) -> UnitAsyn
let connid = id;
let spaces = Arc::clone(&spaces);
id += 100000;
if let Some(n) = args.recv_buffer_size { stream.set_recv_buffer_size(n)?; }
if let Some(n) = args.send_buffer_size { stream.set_send_buffer_size(n)?; }
tokio::spawn(async move {
println!("Connection {} ({:?}) accepted from port {}", connid, addr, port);
match run_connection(connid, stream, spaces).await {
@ -145,10 +152,11 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
});
}
for port in args.ports {
for port in args.ports.clone() {
let spaces = Arc::clone(&spaces);
let args = args.clone();
daemons.push(tokio::spawn(async move {
match run_listener(spaces, port).await {
match run_listener(spaces, port, args).await {
Ok(()) => (),
Err(e) => {
eprintln!("Error from listener for port {}: {}", port, e);