do it similar on the client

main
_ 2021-12-08 21:40:03 -06:00
parent fd4f70b1c9
commit 7a0880fc02
2 changed files with 13 additions and 7 deletions

View File

@ -9,23 +9,29 @@ pub async fn client <I : Iterator <Item=String>> (mut args: I) -> Result <(), Ap
use rand::RngCore; use rand::RngCore;
let common_params = app_common::Params::default (); let common_params = app_common::Params::default ();
let mut bind_addr = "0.0.0.0".to_string (); let mut bind_addrs = vec! [];
while let Some (arg) = args.next () { while let Some (arg) = args.next () {
match arg.as_str () { match arg.as_str () {
"--bind-addr" => { "--bind-addr" => {
bind_addr = match args.next () { bind_addrs.push (match args.next () {
None => return Err (CliArgError::MissingArgumentValue (arg).into ()), None => return Err (CliArgError::MissingArgumentValue (arg).into ()),
Some (x) => x Some (x) => Ipv4Addr::from_str (&x)?
}; });
}, },
_ => return Err (CliArgError::UnrecognizedArgument (arg).into ()), _ => return Err (CliArgError::UnrecognizedArgument (arg).into ()),
} }
} }
let socket = UdpSocket::bind (&format! ("{}:0", bind_addr)).await?; if bind_addrs.is_empty () {
bind_addrs = get_ips ()?;
}
socket.join_multicast_v4 (common_params.multicast_addr, Ipv4Addr::from_str (&bind_addr)?)?; let socket = UdpSocket::bind (SocketAddrV4::new (Ipv4Addr::UNSPECIFIED, 0)).await?;
for bind_addr in bind_addrs {
socket.join_multicast_v4 (common_params.multicast_addr, bind_addr)?;
}
let mut idem_id = [0u8; 8]; let mut idem_id = [0u8; 8];
rand::thread_rng ().fill_bytes (&mut idem_id); rand::thread_rng ().fill_bytes (&mut idem_id);

View File

@ -53,7 +53,7 @@ fn configure <I: Iterator <Item=String>> (mut args: I) -> Result <Params, AppErr
} }
if bind_addrs.is_empty () { if bind_addrs.is_empty () {
println! ("No bind addresses found, auto-detecting all local IPs"); println! ("No bind addresses given, auto-detecting all local IPs");
bind_addrs = get_ips ()?; bind_addrs = get_ips ()?;
} }