libmdns 0.10.1

mDNS Responder library for building discoverable LAN services in Rust
Documentation
from zeroconf import ServiceBrowser, ServiceListener, Zeroconf, IPVersion, ZeroconfServiceTypes
from time import sleep


TYPE = "_http._tcp.local."
NAME = "libmdns Web Server"


class MyListener(ServiceListener):
    def __init__(self):
        self.found = []

    def has_found(self, name):
        return name in self.found

    def add_service(self, zeroconf, type, name):
        self.found.append(name.replace("." + TYPE, ""))

    def update_service(self, zeroconf, type, name):
        pass


zeroconf = Zeroconf(ip_version=IPVersion.V4Only)
listener = MyListener()
browser = ServiceBrowser(zeroconf, TYPE, listener)
try:
    t = 0
    while t < 5 and not listener.has_found(NAME):
        sleep(1)
        t += 1
    assert listener.has_found(NAME)
    print('Service query: Success (IPv4)')
finally:
    zeroconf.close()


zeroconf = Zeroconf(ip_version=IPVersion.V6Only)
listener = MyListener()
browser = ServiceBrowser(zeroconf, TYPE, listener)
try:
    t = 0
    while t < 5 and not listener.has_found(NAME):
        sleep(1)
        t += 1
    assert listener.has_found(NAME)
    print('Service query: Success (IPv6)')
finally:
    zeroconf.close()


r = ZeroconfServiceTypes.find(timeout=0.5)
assert TYPE in r
print('Service type enumeration: Success')