Skip to content

Initial release: v0.3.1

Choose a tag to compare

@skrede skrede released this 06 Mar 11:46
· 17 commits to master since this release
f421ca0

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 = true on async_query, async_discover, and async_browse; service servers detect the QU bit and route responses accordingly

API

  • observer -- passively listen to all mDNS multicast traffic
  • querier -- send mDNS queries and collec2t matching records with a configurable silence timeout
  • service_discovery -- discover services by type (async_discover for raw records, async_browse for aggregated resolved_service values)
  • 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 templated operator<< overloads
  • operator<< overloads for record types, endpoint, dns_type, and dns_class are now function templates (std::basic_ostream<CharT, Traits>&) instead of inline functions taking std::ostream&; public headers use <iosfwd> instead of <ostream>
  • The move_only_function fallback (for compilers without std::move_only_function) is now a proper type-erased wrapper instead of an alias for std::function

Build requirements

  • CMake 3.25+
  • C++23 compiler: GCC 13+, Clang 18+, MSVC 17+ (/std:c++latest), or Xcode 15.4+