Coder Social home page Coder Social logo

mdns-sd's Introduction

mdns-sd

Build Cargo docs.rs Rust version: 1.63+

This is a small implementation of mDNS (Multicast DNS) based service discovery in safe Rust, with a small set of dependencies. Some highlights:

  • supports both the client (querier) and the server (responder) uses.
  • supports macOS, Linux and Windows.
  • supports IPv4 and IPv6.
  • works with both sync and async code.
  • no dependency on any async runtimes.

Approach

We are not using async/.await internally, instead we create a new thread to run a mDNS daemon.

The API interacts with the daemon via flume channels that work easily with both sync and async code. For more details, please see the documentation.

Compatibility and Limitations

This implementation is based on the following RFCs:

This is still beta software. We focus on the common use cases at hand. And we tested with some existing common tools (e.g. Avahi on Linux, dns-sd on MacOS, and Bonjour library on iOS) to verify the basic compatibility.

Currently this library has the following limitations:

  • Only support multicast, no unicast send/recv.

License

Licensed under either of

at your option.

Contribution

Contributions are welcome! Please open an issue in GitHub if any questions.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the above license(s), shall be dual licensed as above, without any additional terms or conditions.

mdns-sd's People

Contributors

amfaber avatar cosminperram avatar dalepsmith avatar fufesou avatar hgomersall avatar hrzlgnm avatar indietyp avatar irvingoujatdevolution avatar izissise avatar keepsimple1 avatar lu-zero avatar lyager avatar mornix avatar oysteintveit-nordicsemi avatar pixsperdavid avatar raphiiko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

mdns-sd's Issues

Issues with using a multicast IP for a service

I'm working on an application that uses multicast for efficiently sending large amounts of ephemeral data. A sanitized example of what I'm trying to attempt can be found here, but in short it appears there's an issue with responding to queries for a service (and A/AAAA record) associated with a multicast address.

It's possible I'm just using the library wrong, so I apologize in advance if that is the case.

I suspect this log message, on the half of my application that registers a service is potentially related:

[2024-03-01T03:58:29Z DEBUG mdns_sd::dns_parser] read_questions: 1
[2024-03-01T03:58:29Z DEBUG mdns_sd::dns_parser] read_others: 0
[2024-03-01T03:58:29Z DEBUG mdns_sd::service_daemon] question: DnsQuestion { entry: DnsEntry { name: "_datablaster._udp.local.", ty: 12, class: 1, unique: false } }
[2024-03-01T03:58:29Z DEBUG mdns_sd::dns_parser] No addrs on LAN of intf Interface { name: "enp1s0", addr: V4(Ifv4Addr { ip: 192.168.1.215, netmask: 255.255.255.0, broadcast: Some(192.168.1.255) }), index: Some(2) }
[2024-03-01T03:58:33Z DEBUG mdns_sd::service_daemon] event received with key 1
[2024-03-01T03:58:33Z DEBUG mdns_sd::service_daemon] received 148 bytes

I'll admit, I'm not the most familiar with the details of mDNS/DNS-SD, so in the meantime I'm going to both dig into the RFCs and the code to make sure I'm not messing up. Otherwise some direction would be greatly appreciated!

If this does end up being a bug, I'm happy to send patches.

Unpublish service

Hi! Great work, I really appreciate this crate because it's so simple and compact. But I've bumped into an error or at least unexpected behaviour: registered services don't send ServiceRemoved event and so they're continuously displaying in avahi-browser even they've done. Tested with dnssd C library and it sends such message as ServiceRemoved. Could you please add method for removing services manually or even impl Drop for purging all services which are being published at the moment.

project reorganisation

This is the tracking issue for project reorganization. Instead of having a giant lib.rs file, split the file into multiple files that are smaller to make maintenance and adding new features more accessible.

New publish does not have TXT record

If start browsing, existing services have TXT record info.

However, if I publish a service while browsing (say with avahi-publish-service), the TXT info is missing.

But if I publish BEFORE I start the browse, I do get the TXT info.

Registered services aren't showing up when using standard tools to test

I'm trying to implement a very minimal service advertisement for use in some unit tests for a strictly client implementation in a different project. I'm more or less pattern matching directly off the code in the documentation; this is the current test main I'm using to eval the library:

fn main() {
    let dummy_service_daemon =
        mdns_sd::ServiceDaemon::new().expect("Could not create service daemon");

    let test_service_type = "_mytest._udp._local";
    let instance_name = "test_instance";
    let service_host_ipv4 = "192.168.1.176";
    let service_hostname = "192.168.1.176.local.";
    let port = 5200;

    let service_info = mdns_sd::ServiceInfo::new(
        test_service_type,
        instance_name,
        service_hostname,
        service_host_ipv4,
        port,
        None,
    );

    println!("Addresses: {:?}", &service_info.get_addresses());

    dummy_service_daemon
        .register(service_info)
        .expect("Failed to register test service");

    loop {
        std::thread::sleep(std::time::Duration::from_millis(100))
    }
}

The service does not seem to be advertised anywhere though. I've tested on both macOS using dns-sd and Ubuntu 20.04 using mdns-scan and the service does not show up. Some example commands I've tried:

$> dns-sd -B _services._udp. local. (this should show all dns-sd services)
$> dns-sd -B _mytest_.udp local. (a direct query against the service type, still shows nothing)

I'm not sure if this is a bug or if there is something missing from the docs that I haven't done correctly here. Thanks for any help you can provide with this!

Service is not resolved by library although the device responds

Hey,

I am currently trying to use the library to search for a specific smart loudspeaker in my local wifi. I use a slightly modified version of the example to do this:

use std::time::Duration;

use mdns_sd::{ServiceDaemon, ServiceEvent};
use tokio::time::sleep;

pub async fn discover() {
    let mdns = ServiceDaemon::new().expect("Failed to create deamon");

    let service_type = "_suegrouping._tcp.local";
    let receiver = mdns.browse(service_type).expect("Failed to browse");

    tokio::spawn(async move {
        while let Ok(event) = receiver.recv_async().await {
            match event {
                ServiceEvent::ServiceResolved(info) => {
                    println!("Resolved a new service: {:}", info.get_fullname());
                }
                other_event => {
                    println!("Other event: {:?}", other_event);
                }
            }
        }
    });

    sleep(Duration::from_secs(20)).await;
}

#[cfg(test)]
mod tests {
    use super::*;

    #[tokio::test]
    async fn test_discover() {
        discover().await;
    }
}

The output of the execution of the test only shows this:

Other event: SearchStarted("_suegrouping._tcp.local on addrs [192.168.16.64, 192.168.122.1]")
Other event: SearchStarted("_suegrouping._tcp.local on addrs [192.168.16.64, 192.168.122.1]")
Other event: SearchStarted("_suegrouping._tcp.local on addrs [192.168.16.64, 192.168.122.1]")
Other event: SearchStarted("_suegrouping._tcp.local on addrs [192.168.16.64, 192.168.122.1]")
Other event: SearchStarted("_suegrouping._tcp.local on addrs [192.168.16.64, 192.168.122.1]")

However, sniffing the network with Wireshark shows that the loudspeaker has answered the query: mdns.zip

The result of that is never shown, though. I have also already tried using the blocking version together with a thread, but that did not work as well.

Is that an issue with the response, the library, or my usage of it?

I am using Rust version 1.68.1, mdns-sd version 0.7.2 and tokio version 1.27.0.

LICENSE-APACHE is missing copyright

Just a quick note, nothing urgent.

I have been looking over the licensing terms, and it seems that the Apache license is incomplete, lno 189 is missing the copyright owner and date.

Allow non-standard service names longer than 15 bytes

I know the DNS-SD spec specifies that the limit for service names is 15 bytes (plus one for leading _), but some organizations have decided to ignore that part of the spec and use service names that are longer than 15 bytes. For example Google has decided that Android TV would use the service name _androidtvremote2 (a total of 17 bytes including the _).

I've tested with removing that specific check in "check_service_name" and did not notice any issue and clients were able to successfully resolve the service.

`.browse` for all subservice's

I am looking into using sub-services with mdns-sd and am wondering if there is a way to subscribe to events for all subservices of a specific service.

For example, I want to callmdns_daemon.browse('my-service._udp.local.') and receive events for a._sub._my-service._udp.local., b._sub._my-service._udp.local. and etc. When subscribing to the "parent" service currently events are received, however, the sub_domain property on the Service will be None which means I don't know which subservice (a or b) the event came from which is super important for my usecase.

It seems like internally a._sub._my-service._udp.local. becomes an advertisement for a._sub._my-service._udp.local. and one for _my-service._udp.local. which explains this behavior but it still seems a little bit weird.

As a workaround, I am going to call .browse(...) for each subservice and join them together with StreamUnordered, however, this makes managing the whole thing a lot more complicated and error prone. Preferably I would like to have only a single flume::Reciever for all events which would simplify my code a heap.

Thanks for this library, it's been working super well!

Failed to send to ... Resource temporarily unavailable (os error 11)

Hi:

The problem I encountered is
query_missing_srv function triggers too frequently, When there are a large number of Mac devices in the environment。

  loop {
            ...
            // Send out additional queries for unresolved instances, where
            // the early responses did not have SRV records.
            zc.query_missing_srv();
            ...
 }
cargo run --example query -- _test._tcp

[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:04Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to [ff02::fb%3]:5353 via Interface { name: "wlan0", addr: V6(Ifv6Addr { ip: fe80::fde6:de75:1abc:855e, netmask: ffff:ffff:ffff:ffff::, broadcast: None }), index: Some(3) }: Resource temporarily unavailable (os error 11)
[2024-02-01T02:45:05Z ERROR mdns_sd::service_daemon] Failed to send to 224.0.0.251:5353 via Interface { name: "wlan0", addr: V4(Ifv4Addr { ip: 192.168.10.163, netmask: 255.255.254.0, broadcast: Some(192.168.11.255) }), index: Some(3) }: Resource temporarily unavailable (os error 11)

2024-02-01 10-50-35屏幕截图

Querying over network doesn't seem to be working on windows

So I'm announcing a service like this(this is with latest main):

// task::spawn is from async-std
task::spawn(async {
    let addr = local_ipaddress::get().unwrap();
    let mdns = ServiceDaemon::new()
        .expect("Failed to construct ServiceDaemon");

    let service = ServiceInfo::new(
        "_test._tcp.local.",
        "test",
        &format!("{addr}.local."),
        &addr,
        8081,
       None
    ).expect("Failed to construct ServiceInfo");

    mdns.register(service).expect("Failed to register service");

    // Keep it running
    loop {
        task::sleep(Duration::from_millis(250)).await;
    }
});

dns-sd is picking it up:

> dns-sd.exe -L test _test._tcp local.
Lookup test._test._tcp.local.
19:46:58.600  test._test._tcp.local. can be reached at 192.168.1.126.local.:8081 (
interface 33)

But query example does not (works if I run them both on the same machine):

> cargo.exe run -q --example query _test._tcp
Received other event: SearchStarted("_test._tcp.local.")
Received other event: SearchStarted("_test._tcp.local.")
Received other event: SearchStarted("_test._tcp.local.")
Received other event: SearchStarted("_test._tcp.local.")

Trouble with query_missing_srv()

I've experienced some trouble in the latest release with the above function, and just wondering if additional querying of SRV entries are within spec?

What happens is that the SRV query within the function above is very aggressive, and if a SRV never comes it will spam the network.

There should probably be a stopping mechanism if no answer hits the cache?

error message from address decoding

I encountered the following error with the last main branch (2023-10-10):

023-10-10T14:04:13.965298-07:00 ERROR mDNS_daemon mdns_sd::service_daemon: Invalid incoming message: 
read_name: decode offset error for RData type 1 record: Some(DnsAddress { record: DnsRecord { entry: DnsEntry { name: "f72828f9-9dd0-4736-9a6e-c2ab1b1352ba.local.", ty: 1, class: 1, unique: true }, ttl: 120, created: 1696971853965, expires: 1696971973965, refresh: 1696971949965 }, address: 254.128.0.0 }) offset: 250 expected offset: 262    

It seems that the daemon tries to decode the address part as IPv4 but the actual data was IPv6, hence 262 - 250 = 12 bytes difference.

Windows: Failed to create daemon: Msg("join multicast group on addr 192.168.82.56: The requested address is not valid in its context. (os error 10049)"

Hi,

I'm evaluating mdns-sd. I'm just querying for my chromecasts:

cargo run --example query _googlecast._tcp

I get a rust backtrace, and do not know what I'm doing wrong:

thread 'main' panicked at 'Failed to create daemon: Msg("join multicast group on addr 192.168.82.56: The requested address is not valid in its context. (os error 10049)")', examples\query.rs:20:37
stack backtrace:
   0: std::panicking::begin_panic_handler
             at /rustc/69f9c33d71c871fc16ac445211281c6e7a340943/library\std\src\panicking.rs:575
   1: core::panicking::panic_fmt
             at /rustc/69f9c33d71c871fc16ac445211281c6e7a340943/library\core\src\panicking.rs:65
   2: core::result::unwrap_failed
             at /rustc/69f9c33d71c871fc16ac445211281c6e7a340943/library\core\src\result.rs:1791
   3: enum2$<core::result::Result<mdns_sd::service_daemon::ServiceDaemon,enum2$<mdns_sd::error::Error> > >::expect<mdns_sd::service_daemon::ServiceDaemon,enum2$<mdns_sd::error::Error> >
             at /rustc/69f9c33d71c871fc16ac445211281c6e7a340943\library\core\src\result.rs:1070
   4: query::main
             at .\examples\query.rs:20
   5: core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
             at /rustc/69f9c33d71c871fc16ac445211281c6e7a340943\library\core\src\ops\function.rs:251
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: process didn't exit successfully: `target\debug\examples\query.exe _googlecast._tcp` (exit code: 101)

Also, all tests are failing:

C:\Projects\mdns-sd>target\debug\deps\mdns_test-c4fdcd0cd49a069d.exe

running 5 tests
test subtype ... FAILED
test integration_success ... FAILED
test service_name_check ... FAILED
test service_without_properties_with_alter_net ... FAILED
test service_with_invalid_addr ... FAILED

failures:

---- subtype stdout ----
thread 'subtype' panicked at 'Failed to create daemon: Msg("join multicast group on addr 192.168.82.56: The requested address is not valid in its context. (os error 10049)")', tests\mdns_test.rs:327:34

---- integration_success stdout ----
thread 'integration_success' panicked at 'Failed to create daemon: Msg("join multicast group on addr 192.168.82.56: The requested address is not valid in its context. (os error 10049)")', tests\mdns_test.rs:14:34

---- service_name_check stdout ----
thread 'service_name_check' panicked at 'Failed to create server daemon: Msg("join multicast group on addr 192.168.82.56: The requested address is not valid in its context. (os error 10049)")', tests\mdns_test.rs:383:46

---- service_without_properties_with_alter_net stdout ----
thread 'service_without_properties_with_alter_net' panicked at 'Failed to create daemon: Msg("join multicast group on addr 192.168.82.56: The requested address is not valid in its context. (os error 10049)")', tests\mdns_test.rs:205:34

---- service_with_invalid_addr stdout ----
thread 'service_with_invalid_addr' panicked at 'Failed to create daemon: Msg("join multicast group on addr 192.168.82.56: The requested address is not valid in its context. (os error 10049)")', tests\mdns_test.rs:266:34
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

I do not know why it uses 192.168.82.56. That is not my current network, and not in ipconfig /all. It seems to be the same one as #52

But is broken again in current HEAD? I'm using git version: f12acc8

Updating service info when service is registered

Hello, is there a way to update ServiceInfo of a registered service, for example hostname or some txt record that would get re-announces to listening clients without unregistering and registering the service again? Also how expensive is doing unregistration and registration again with changed info, is there a way to do this efficiently?

TXT inconsistencies with RFC6763

EDIT (by @keepsimple1): adding check emojis to track the status of the issues. ✅ means an issue has been solved.

(This should probably be several Issues, sorry.)

Last key ✅

Supposed to use the first appearance key and ignore repeats.
Keys should ignore case. "foo", "Foo", "FOO" are all the same key.

Just key ✅

Needs to differentiate between "key=" and "key". The former has an
empty value, the latter has NO value. Only way I can think of is to use
HashMap<String, Option<String>> instead of HashMap<String, String>

Unfortunately, this is an API change.

Values are bytes ✅

The value can be any string of bytes including "=" and NUL.
Specifically, it is not required to be utf-8. So the value type
should probably be [u8] instead of a String

Unfortunately, this is an API change.

New publish does not have TXT ✅

If start browsing, existing services have TXT record info.
If I publish a service (with avahi-publish-service), the TXT info is missing.
But if I publish BEFORE I start the browse, I do get the TXT info.

RFC

https://www.rfc-editor.org/rfc/rfc6763#section-6.3

Everything up to the first '=' character is the key (Section 6.4).

Everything after the first '=' character to the end of the string
(including subsequent '=' characters, if any) is the value (Section
6.5).

https://www.rfc-editor.org/rfc/rfc6763#section-6.4
Rules for Keys in DNS-SD Key/Value Pairs

The characters of a key MUST be printable US-ASCII values (0x20-0x7E)
[RFC20], excluding '=' (0x3D).

Spaces in the key are significant, whether leading, trailing, or in
the middle -- so don't include any spaces unless you really intend
that.

Case is ignored when interpreting a key, so "papersize=A4",
"PAPERSIZE=A4", and "Papersize=A4" are all identical.

If there is no '=' in a DNS-SD TXT record string, then it is a
boolean attribute, simply identified as being present, with no value.

A given key SHOULD NOT appear more than once in a TXT record.

If a client receives a TXT record containing the same key more than
once, then the client MUST silently ignore all but the first
occurrence of that attribute.

https://www.rfc-editor.org/rfc/rfc6763#section-6.5
Rules for Values in DNS-SD Key/Value Pairs

If there is an '=' in a DNS-SD TXT record string, then everything
after the first '=' to the end of the string is the value. The value
can contain any eight-bit values including '='.

The value is opaque binary data. Often the value for a particular
attribute will be US-ASCII [RFC20] or UTF-8 [RFC3629] text, but it is
legal for a value to be any binary data.

remove busy polling in the service daemon run loop

let timeout = Duration::from_millis(20); // moderate frequency for polling.

Currently ServiceDaemon runs an event loop that uses a "busy polling" approach where it checks possible events at least every 20ms. This could be quite wasteful (CPU wise) if there is no much going on, and cause a possible delay of processing commands up to this timeout. Ideally we want to remove this "busy polling" and only checks everything when an event happens.

In other words, there are 2 benefits of removing busy polling the channel:

  1. Reduce CPU utilization.
  2. Reduce latency of reacting to incoming Commands.

Multiple Streams using AioQuic

hai ,

It is not an issue.
one small quick query

@keepsimple1
Could you please confirm were you able to create multiple streams in a single connection using the AIOQUIC code you have in Github.

Sorry for raising an issue as i am unable to find your email to ask this query.

Looking forward for your reply

Thank you.

[windows branch] mdns error does not implement Error trait

EDIT: It's in windows branch, because it lacks 8e863f4

Absence of std::error::Error trait implementation makes mdns-sd incompatible with other crates, in my case, with anyhow crate

mdns-sd/src/lib.rs

Lines 153 to 165 in 52c134d

/// A basic error type from this library.
#[derive(Debug, PartialEq)]
#[non_exhaustive]
pub enum Error {
/// Like a classic EAGAIN. The receiver should retry.
Again,
/// A generic error message.
Msg(String),
/// Error during parsing of ip address
ParseIpAddr(String),
}

Custom domain and type

I'm writing a driver for a specific protocol that requires an empty domain. However, the library requires ty_domain to have a specific suffix ._[tcp|udp].local (that isn't in the spec I'm following) and won't let me specify an empty domain. Is that something you'd like to fix or should I maintain my own fork alongside?

Found service won't resolve if the query response didn't include a SRV record

I've got a couple networked audio devices (Dante) where the services they advertise never resolve because they don't include a SRV record by default when the _netaudio-cmc._udp service is queried.

❯ cargo run --example query _netaudio-cmc._udp
ServiceFound    : AVIOAI1-52b8b6._netaudio-cmc._udp.local.
ServiceFound    : ANI4OUT-0ac908._netaudio-cmc._udp.local.
ServiceFound    : raskin._netaudio-cmc._udp.local.
ServiceFound    : AVIOAI1-52b8b6._netaudio-cmc._udp.local.
ServiceFound    : ANI4OUT-0ac908._netaudio-cmc._udp.local.
ServiceFound    : AVIOAI1-52b8b6._netaudio-cmc._udp.local.
ServiceFound    : ANI4OUT-0ac908._netaudio-cmc._udp.local.
ServiceFound    : raskin._netaudio-cmc._udp.local.
ServiceResolved : raskin._netaudio-cmc._udp.local. IP: {10.76.7.168}
ServiceFound    : ANI4OUT-0ac908._netaudio-cmc._udp.local.
ServiceFound    : AVIOAI1-52b8b6._netaudio-cmc._udp.local.
ServiceFound    : AVIOAI1-52b8b6._netaudio-cmc._udp.local.
ServiceFound    : ANI4OUT-0ac908._netaudio-cmc._udp.local.
ServiceFound    : AVIOAI1-52b8b6._netaudio-cmc._udp.local.
ServiceFound    : ANI4OUT-0ac908._netaudio-cmc._udp.local.
ServiceFound    : AVIOAI1-52b8b6._netaudio-cmc._udp.local.
ServiceFound    : ANI4OUT-0ac908._netaudio-cmc._udp.local.
ServiceFound    : AVIOAI1-52b8b6._netaudio-cmc._udp.local.
ServiceFound    : ANI4OUT-0ac908._netaudio-cmc._udp.local.
^C

no-srv-in-response.pcapng.tar.gz

note: raskin is the host machine running the Dante Virtual Soundcard which appears to include the PTR by default.

If I send a SRV or ALL query to each service (e.g. AVIOAI1-52b8b6._netaudio-cmc._udp.local) after ServiceEvent::ServiceFound, the query response will contain a SRV record, allowing ServiceEvent::ServiceResolved to be triggered as desired.

❯ cargo run --example query _netaudio-cmc._udp
ServiceFound    : AVIOAI1-52b8b6._netaudio-cmc._udp.local.
ServiceFound    : ANI4OUT-0ac908._netaudio-cmc._udp.local.
ServiceResolved : AVIOAI1-52b8b6._netaudio-cmc._udp.local. IP: {10.76.7.149}
ServiceResolved : ANI4OUT-0ac908._netaudio-cmc._udp.local. IP: {10.76.7.148}
ServiceFound    : raskin._netaudio-cmc._udp.local.
ServiceFound    : raskin._netaudio-cmc._udp.local.
ServiceResolved : raskin._netaudio-cmc._udp.local. IP: {10.76.7.168}

send-query-after.pcapng.tar.gz

I'm not sure if these devices are just not following the spec, or if mdns-sd should already be handling this scenario.

git diff used to expose a mdns.send_query for testing
diff --git a/examples/query.rs b/examples/query.rs
index 793ca6f..f9f03b5 100644
--- a/examples/query.rs
+++ b/examples/query.rs
@@ -36,6 +36,10 @@ fn main() {
                     info.get_addresses()
                 );
             }
+            ServiceEvent::ServiceFound(_, full_name) => {
+                println!("ServiceFound    : {}", &full_name);
+                mdns.send_query(&full_name).expect("Failed to query");
+            }
             other_event => {
                 println!("Received other event: {:?}", &other_event);
             }
diff --git a/src/service_daemon.rs b/src/service_daemon.rs
index 6121290..14ef7a7 100644
--- a/src/service_daemon.rs
+++ b/src/service_daemon.rs
@@ -147,6 +147,20 @@ impl ServiceDaemon {
         Ok(resp_r)
     }
 
+    /// Send a query for any record types.
+    ///
+    /// When an error is returned, the caller should retry only when
+    /// the error is `Error::Again`, otherwise should log and move on.
+    pub fn send_query(&self, name: &str) -> Result<()> {
+        self.sender
+            .try_send(Command::Query(name.to_string()))
+            .map_err(|e| match e {
+                TrySendError::Full(_) => Error::Again,
+                e => e_fmt!("flume::channel::send failed: {}", e),
+            })?;
+        Ok(())
+    }
+
     /// Stops searching for a specific service type.
     ///
     /// When an error is returned, the caller should retry only when
@@ -341,6 +355,10 @@ impl ServiceDaemon {
                 });
             }
 
+            Command::Query(name) => {
+                zc.send_query(&name, TYPE_ANY);
+            }
+
             Command::Register(service_info) => {
                 debug!("register service {:?}", &service_info);
                 zc.register_service(service_info);
@@ -1182,6 +1200,9 @@ enum Command {
     /// Browsing for a service type (ty_domain, next_time_delay_in_seconds, channel::sender)
     Browse(String, u32, Sender<ServiceEvent>),
 
+    /// Query for a name
+    Query(String),
+
     /// Register a service
     Register(ServiceInfo),

add Windows support

NOTE: if you are familiar with socket support on Windows in Rust, please feel free to comment on this issue.

I started to find cases when I wanted to use this library on Windows. Don't know how to implement yet. This is a placeholder to this new feature.

Update: after some research I plan to use winapi crate to add support on Windows. Hopefully there are not too many gotcha.

Should the daemon send the preset IPs to the browser

Suppose we have some lans like the following:

image

B send a query. If A's response contains 172.21.5.234, it will be confusing.
In 'A''s response, the IP may be better set to the binding socket.

And I also think response may be better to send back to the interface, witch received the query. No need to send outging responses to all interfaces.

`ServiceEvent::ServiceRemoved` doesn't work

Hi,

I noticed that ServiceEvent::ServiceRemoved never fires. I tried shutting down the service daemon, I tried stop_browse on the service daemon, but the other computer never sees that my computer stopped listening/browsing/broadcasting.

Both computers are Windows.

Am I understanding correctly this event should fire when a device goes away?

Window not seeing service but Liinux does with `avahi-publish`

When publishing a service on Linux with avahi-publish like

avahi-publish -s Service _http._tcp 8080 path=/

The code at https://bitbucket.org/dalepsmith/rust-mdns-discover/src/master/
sees the service on Linux, but not when compiled for Windows.

The windows compiled code does see services published via files in /etc/avahi/services/*.service

Not sure what's happening, but it's probably related to ordering of received packets? Or maybe ordering of records in a packet?

Errors from mdns-sd in the face of WireGuard interface

I believe this is a related problem to the one in #52 , only this is on linux and the VPN software is WireGuard.

Everything seems to be working, except an error is logged.
I may be using the library in a bad way (?), because I start many browses for different service types, and every one of those results in the same error being logged, cluttering my logs.

ERROR mdns_sd::service_daemon] send to SockAddr { ss_family: 2, len: 16 } via interface Ifv4Addr { ip: 10.255.241.226, netmask: 255.255.248.0, broadcast: None } failed: Required key not available (os error 126)

I'm not sure about the best way to deal with this, but to my naive mind, a library shouldn't be logging errors, it should return them to the caller so the caller can decide to log, propagate or ignore.

A and AAAA mDNS records

An SRV record is most appropriate for my usecase, however, there are a few cases where the client has only a web browser. Since I'll always have an http server at a known port, I'll just need an A record. I don't see a way to do that with this library, but I was able to make a working SRV record.

How do I create an A record with this library?

If that's not yet a feature, please consider this issue a feature request.

Multiple IP addresses don't work correctly over network

When exposing an MDNS service with multiple ip addresses this library does not seem to work correctly. If the same machine is used for both discovery and advertising the service, all ips show up correct but if the advertisement goes across the network between two machines (I am testing with a Mac and Linux machine), only one IP address will show up when the service is discovered on the remote device.

Code I am using

Not consistent shutdowns and no way to know if shut down?

I've created a reproducible (running on 0.9.3):

use mdns_sd::{ServiceDaemon, ServiceInfo};

fn main() {
    let mdns = ServiceDaemon::new().unwrap();
    mdns.shutdown().unwrap();

    let service_type = "_mdns-sd-my-test._udp.local.";
    let instance_name = "my_instance";
    let ip = "192.168.1.12";
    let host_name = "192.168.1.12.local.";
    let port = 5200;
    let properties = [("property_1", "test"), ("property_2", "1234")];

    let my_service = ServiceInfo::new(
        service_type,
        instance_name,
        host_name,
        ip,
        port,
        &properties[..],
    ).unwrap();

    mdns.register(my_service).unwrap();

    mdns.shutdown().unwrap();
}

This example consists of creating a daemon, shutting it down then registering a service and then shutting it down again, after running it multiple times, sometimes I get panics (due to unwrapping in the example) and sometimes not, the problem here is that this is not consistent.

Console output

cosminperram@cosminsmbpro untitled % cargo r
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
Running target/debug/untitled
thread 'main' panicked at src/main.rs:23:31:
called Result::unwrap() on an Err value: Msg("flume::channel::send failed: sending on a closed channel")
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

cosminperram@cosminsmbpro untitled % cargo r
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running target/debug/untitled

Another problem would be of how could I know if the daemon has a closed channel? Looking for something simple like is_running.

Hope I haven't missed anything related these issues in docs, if I did, please state so.
Thanks for this library!

Unicast Send/Receive Support

I need unicast send/receive support for my current project so willing to work on adding this feature. Similar to #61, could you give an overview of tasks that are involved in implementing this?

Ipv6 support

Might be nice to detail what is missing and what to add first. @keepsimple1 can you edit this issue with a list of tasks?

allow multiple addresses in ServiceInfo

The ServiceInfo struct can hold multiple corresponding addresses, but there is no way to add more than a single addr (only one via ServiceInfo::new). Would it be possible to add the ability to define multiple addresses?

Use `serde` for de/ser Txt Records

Hi there! Could we start to use serde for de/ser of TXT properties? To be honest, I'm not sure if it's RFC-complaint, may someone more experienced answer me.

client query

How do clients specify IP addresses to discover services? I want to get a response on some VPN network to return some parameters.

check_service_name_length() attempt to subtract with overflow

fn check_service_name_length(ty_domain: &str, limit: u8) -> Result<()> {
-   let service_name_len = ty_domain.len() - DOMAIN_LEN - 1; // exclude the leading `_`
+   let service_name_len = ty_domain.len() - (DOMAIN_LEN - 1); // exclude the leading `_`
    if service_name_len > limit as usize {
        return Err(e_fmt!("Service name length must be <= {} bytes", limit));
    }
    Ok(())
}

link-local addresses alongside routable interfaces

This looks like it might be relevant to #119 . In our system we wish to be able to resolve devices on a link local subnet whilst still having routable interfaces active. The comment in the code suggest clients might have a problem, but it's not clear what that problem is.

Is there some way (including through modifying the library) to enable link-local mdns-sd whilst still having routable interfaces?

Simple browse test return nothing

Hi!

I try to get the IP address of devices connected to my network. When I run in my terminal:
dns-sd -B _http._tcp (or just dns-sd -B)

I can see my printer but this code below only receive SearchStarted events

fn main() {
    let mdns = mdns_sd::ServiceDaemon::new().expect("Failed to create daemon");
    let rcv = mdns.browse("_http._tcp").expect("Failed to browse");

    loop {
        let event = rcv.recv().unwrap();
        println!("event: {:?}", event);
    }
}

What did I do wrong?
Thanks

EDIT: I'm on MacOS 12.3.1 | rustc 1.62.1

Received length loss

This question comes from last branch main.

    fn handle_read(&mut self, ip: &IpAddr) -> bool {
        let intf_sock = match self.intf_socks.get_mut(ip) {
            Some(if_sock) => if_sock,
            None => return false,
        };
        let mut buf = vec![0u8; MAX_MSG_ABSOLUTE];
        let sz = match intf_sock.sock.read(&mut buf) {
            Ok(sz) => sz,
            Err(e) => {
                if e.kind() != std::io::ErrorKind::WouldBlock {
                    error!("listening socket read failed: {}", e);
                }
                return false;
            }
        };

        debug!("received {} bytes", sz);

        // If sz is 0, it means sock reached End-of-File.
        if sz == 0 {
            error!("socket {:?} was likely shutdown", intf_sock);
            if let Err(e) = self.poller.delete(&intf_sock.sock) {
                error!("failed to remove sock {:?} from poller: {}", intf_sock, &e);
            }

            // Replace the closed socket with a new one.
            match new_socket_bind(&intf_sock.intf) {
                Ok(sock) => {
                    let intf = intf_sock.intf.clone();
                    self.intf_socks.insert(*ip, IntfSock { intf, sock });
                    debug!("reset socket for IP {}", ip);
                }
                Err(e) => error!("re-bind a socket to {}: {}", ip, e),
            }
            return false;
        }

        // ******************** buf.len() == MAX_MSG_ABSOLUTE != sz
        match DnsIncoming::new(buf) {
            Ok(msg) => {
                if msg.is_query() {
                    self.handle_query(msg, ip);
                } else if msg.is_response() {
                    self.handle_response(msg);
                } else {
                    error!("Invalid message: not query and not response");
                }
            }
            Err(e) => error!("Invalid incoming DNS message: {}", e),
        }

        true
    }

Trailing '.' in instance names are incorrectly removed

From https://www.rfc-editor.org/rfc/rfc6763#section-4.1.1

The portion of the Service Instance Name is a user-
friendly name consisting of arbitrary Net-Unicode text [RFC5198]. It
MUST NOT contain ASCII control characters (byte values 0x00-0x1F and
0x7F) [RFC20] but otherwise is allowed to contain any characters,
without restriction, including spaces, uppercase, lowercase,
punctuation -- including dots -- accented characters, non-Roman text,
and anything else that may be represented using Net-Unicode.

The code uses trim_end_matches('.') which would remove the '.' in somename. as from somename.._http._tcp.local.

Join multicast group error: An invalid argument was supplied. (os error 10022)

Log from mikekgr in discussion rustdesk/rustdesk#844 (comment)

OS: Win10

IPv4 addrs: [100.125.199.128, 192.168.0.108, 192.168.1.186, 172.29.96.1]
new socket bind to 100.125.199.128:5353
new socket bind to 192.168.0.108:5353
join multicast group on addr 192.168.1.186: An invalid argument was supplied. (os error 10022), 

The code.

I can't reproduce on my PC. I'm not sure if the problem is 100.125.199.128.
I'll contact him later for more tests.

Malformed mDNS query causes ServiceDaemon to panic

First of all, thank you for this library :)

A while ago, I've been using mDNS for local DNS-SD for a small project without a problem. Revisiting the project, however, I've noticed a strange behavior of the ServiceDaemon which now panics immediately after startup.

After some brief investigation, I've found out that the panic is occurring in these lines in dns_parse.rs, with the culprit being an Amazon Firestick constantly sending malformed mDNS queries:

mdns-sd/src/dns_parser.rs

Lines 1131 to 1135 in 245da0d

panic!(
"Bad domain name at length byte 0x{:x} (offset {})",
length, offset
);
}

Would it be possible to change the error handling here to make the ServiceDaemon a bit more robust in the face of malformed queries?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.