Send a message to a remote nameserver, preferring UDP if the request is
small enough. If the request is too large, or if the UDP response is
truncated, tries again using TCP.
Send a message to a remote nameserver over UDP, returning the
response. If the message would be truncated, or an error occurs
while sending it, None is returned. Otherwise the deserialised
response message is: but this response is NOT validated -
consumers MUST validate the response before using it!