diff --git a/Cargo.toml b/Cargo.toml index cdaf664..8b55c13 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,9 +20,9 @@ keywords = ["mdns", "dns", "multicast", "chromecast", "discovery"] [dependencies] dns-parser = "0.8.0" net2 = "0.2" -err-derive = "0.2.1" +thiserror = "1.0.60" futures-core = "0.3.1" futures-util = "0.3.1" log = "0.4" -async-stream = "0.2.0" +async-stream = "0.3.5" async-std = { version = "1.6.2", features = ["unstable", "attributes"] } diff --git a/src/errors.rs b/src/errors.rs index c625d8b..98a764b 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -1,11 +1,11 @@ -use err_derive::Error; +use thiserror::Error; #[derive(Debug, Error)] pub enum Error { - #[error(display = "_0")] - Io(#[error(source)] std::io::Error), - #[error(display = "_0")] - Dns(#[error(source)] dns_parser::Error), - #[error(display = "_0")] - TimeoutError(#[error(source)] async_std::future::TimeoutError), + #[error("{0}")] + Io(#[from] std::io::Error), + #[error("{0}")] + Dns(#[from] dns_parser::Error), + #[error("{0}")] + TimeoutError(#[from] async_std::future::TimeoutError), } diff --git a/src/mdns.rs b/src/mdns.rs index 1150686..4bdd371 100644 --- a/src/mdns.rs +++ b/src/mdns.rs @@ -7,6 +7,8 @@ use futures_core::Stream; use std::sync::Arc; use async_std::net::UdpSocket; +use net2::UdpSocketExt; + #[cfg(not(target_os = "windows"))] use net2::unix::UnixUdpBuilderExt; use std::net::SocketAddr; @@ -23,6 +25,7 @@ pub fn mdns_interface( socket.set_multicast_loop_v4(false)?; socket.join_multicast_v4(&MULTICAST_ADDR, &interface_addr)?; + socket.set_multicast_if_v4(&interface_addr)?; let socket = Arc::new(UdpSocket::from(socket));