Command-line control over buffer sizes
This commit is contained in:
parent
6e4373fcf2
commit
461b12344c
|
@ -13,10 +13,15 @@ use tungstenite::Message;
|
||||||
|
|
||||||
use structopt::StructOpt;
|
use structopt::StructOpt;
|
||||||
|
|
||||||
#[derive(StructOpt)]
|
#[derive(Clone, StructOpt)]
|
||||||
struct Cli {
|
struct Cli {
|
||||||
#[structopt(short = "p", long = "port", default_value = "8001")]
|
#[structopt(short = "p", long = "port", default_value = "8001")]
|
||||||
ports: Vec<u16>,
|
ports: Vec<u16>,
|
||||||
|
|
||||||
|
#[structopt(long)]
|
||||||
|
recv_buffer_size: Option<usize>,
|
||||||
|
#[structopt(long)]
|
||||||
|
send_buffer_size: Option<usize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
type UnitAsyncResult = Result<(), std::io::Error>;
|
type UnitAsyncResult = Result<(), std::io::Error>;
|
||||||
|
@ -99,7 +104,7 @@ async fn run_connection(connid: ConnId,
|
||||||
Ok(())
|
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?;
|
let mut listener = TcpListener::bind(format!("0.0.0.0:{}", port)).await?;
|
||||||
println!("Listening on port {}", port);
|
println!("Listening on port {}", port);
|
||||||
let mut id = port as u64 + 100000000000000;
|
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 connid = id;
|
||||||
let spaces = Arc::clone(&spaces);
|
let spaces = Arc::clone(&spaces);
|
||||||
id += 100000;
|
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 {
|
tokio::spawn(async move {
|
||||||
println!("Connection {} ({:?}) accepted from port {}", connid, addr, port);
|
println!("Connection {} ({:?}) accepted from port {}", connid, addr, port);
|
||||||
match run_connection(connid, stream, spaces).await {
|
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 spaces = Arc::clone(&spaces);
|
||||||
|
let args = args.clone();
|
||||||
daemons.push(tokio::spawn(async move {
|
daemons.push(tokio::spawn(async move {
|
||||||
match run_listener(spaces, port).await {
|
match run_listener(spaces, port, args).await {
|
||||||
Ok(()) => (),
|
Ok(()) => (),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
eprintln!("Error from listener for port {}: {}", port, e);
|
eprintln!("Error from listener for port {}: {}", port, e);
|
||||||
|
|
Loading…
Reference in New Issue