From 221a0bef2fc5cedd19d7161f8967918064a0032e Mon Sep 17 00:00:00 2001 From: _ <_@_> Date: Wed, 8 Dec 2021 21:48:41 -0600 Subject: [PATCH] ignore errors if an interface can't join multicast This works okay on my home network, but it's a little more magical than I wanted - I can't force it to pick up the wifi interface. If the Ethernet is plugged in, the laptop always and only picks that, even if I know the server only asked the Ethernet interface. This is fine, but only because my Ethernet happens to be faster than my Wifi. I'm not sure how it will behave at work, where WiFi and Ethernet may be separate networks. At least the error messages are better now, so I can figure out why it wasn't auto-starting with systemd. --- src/client.rs | 4 +++- src/server.rs | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/client.rs b/src/client.rs index 4fa34fb..a9926a3 100644 --- a/src/client.rs +++ b/src/client.rs @@ -30,7 +30,9 @@ pub async fn client > (mut args: I) -> Result <(), Ap 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)?; + if let Err (e) = socket.join_multicast_v4 (common_params.multicast_addr, bind_addr) { + println! ("Error joining multicast group with iface {}: {:?}", bind_addr, e); + } } let mut idem_id = [0u8; 8]; diff --git a/src/server.rs b/src/server.rs index e8baab6..1513078 100644 --- a/src/server.rs +++ b/src/server.rs @@ -15,7 +15,9 @@ pub async fn server > (args: I) -> Result <(), AppErro let socket = UdpSocket::bind (SocketAddrV4::new (Ipv4Addr::UNSPECIFIED, params.common.server_port)).await?; for bind_addr in ¶ms.bind_addrs { - socket.join_multicast_v4 (params.common.multicast_addr, *bind_addr)?; + if let Err (e) = socket.join_multicast_v4 (params.common.multicast_addr, *bind_addr) { + println! ("Error joining multicast group with iface {}: {:?}", bind_addr, e); + } } serve_interface (params, socket).await?;