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

Reply via email to