Repository navigation
Initial release: v0.3.1
v0.3.0
First public release of mdnspp as a standalone C++23 mDNS/DNS-SD library.
Highlights
- Standalone implementation -- no external dependencies for the default policy; the original mdns C-library dependency has been removed entirely
- Policy-based architecture -- swap socket, timer, and executor implementations at compile time (DefaultPolicy for native sockets, AsioPolicy for ASIO completion token support, MockPolicy for testing)
- ASIO completion tokens -- callbacks, futures, coroutines (
use_awaitable), and deferred operations - Cross-platform -- Linux, macOS, and Windows with CI coverage across GCC 13/14, Clang 18/19, MSVC 17+, and Xcode 15.4+
- QU bit support (RFC 6762 section 5.4) -- queriers and service discovery can request unicast responses by setting
unicast = trueonasync_query,async_discover, andasync_browse; service servers detect the QU bit and route responses accordingly
API
observer-- passively listen to all mDNS multicast trafficquerier-- send mDNS queries and collec2t matching records with a configurable silence timeoutservice_discovery-- discover services by type (async_discoverfor raw records,async_browsefor aggregatedresolved_servicevalues)service_server-- announce a service and respond to matching queries with RFC 6762-compliant random delay
Breaking changes from earlier development versions
- Minimum Clang version bumped from 17 to 18+ due to template deduction failures in Clang 17's
<tuple>implementation when used with templatedoperator<<overloads operator<<overloads for record types,endpoint,dns_type, anddns_classare now function templates (std::basic_ostream<CharT, Traits>&) instead ofinlinefunctions takingstd::ostream&; public headers use<iosfwd>instead of<ostream>- The
move_only_functionfallback (for compilers withoutstd::move_only_function) is now a proper type-erased wrapper instead of an alias forstd::function
Build requirements
- CMake 3.25+
- C++23 compiler: GCC 13+, Clang 18+, MSVC 17+ (
/std:c++latest), or Xcode 15.4+