Norbert and me looked at using DNS for service discovery and ran into some of
the limitations of the NetNameResolver[1]. In the end I created an initial DNS
implementation in Pharo called Paleo-DNS[2] to overcome these.
DNS is a protocol we use every day but rarely think of. There is an active IETF
community that is evolving the protocol and finding new usages (service
discovery is one of them).
In DNS there are different types of resource records (RR). The most commonly
used ones in a client ("stub") are "A" for IPv4 addresses, "AAAA" for IPv6
addresses, "CNAME" for aliases, "SRV" records. So far only support for "A"
records was implemented.
So if you are curious about DNS then this is a great opportunity to add your
favorite RR implementation to it and send a PR. There are probably 20+ of them
to go. ;)
Query example using DNS-over-TLS (DoT) to Google Public DNS
PaleoDNSTLSTransport new
destAddress: #[8 8 4 4] port: 853;
timeout: 2 seconds;
query: (PaleoDNSQuery new
transactionId: (SharedRandom globalGenerator
nextInt: 65535);
addQuestion: (PaleoRRA new rr_name:
'pharo.org.');
addAdditional: (PaleoRROpt new udpPayloadSize:
4096))
[1] It's blocking on Unix, on Mac only one look-up may occur at a time and it
returns exactly one address. There is also no IPv6 support.
[2] https://github.com/zecke/paleo-dns