Socket is already connected
		public void AssertGoogle(DnsMessage msg)
		{
			Assert.IsNotNull (msg);
			Assert.IsTrue (msg.AnswerRecords.Count > 0);
			Assert.AreEqual( 
				173,
				(msg.AnswerRecords[0] as ARecord).Address.GetAddressBytes()[0]
			);
		}
		[Test]
		public void TestResolve ()
		{
			AssertGoogle (
				DnsClient.Default.Resolve (
					"google.com", RecordType.A)
			);
		}
結果が返らない。ブレークポイント入れるとSocket is already connectedで例外起きている。
ので、DnsClientBase.csを修正:
private byte[] QueryByUdp(DnsClientEndpointInfo endpointInfo, byte[] messageData, int messageLength, out IPAddress responderAddress)
{
  ....
                    if( udpClient.Connected )
                        udpClient.Send(messageData);
                    else 
                        udpClient.SendTo(messageData, messageLength, SocketFlags.None, serverEndpoint);
BeginResolve でも同じ
		[Test]
		public void TestResolveAsync()
		{
			DnsClient.Default.BeginResolve (
				"google.com", 
				ar => {
					AssertGoogle (
						DnsClient.Default.EndSendMessage (ar)
					);
				}, null);
		}
で結果がかえらないので、同様に修正:
        private void UdpBeginSend<TMessage>(DnsClientAsyncState<TMessage> state)
            where TMessage : DnsMessageBase, new()
        {
                 ....
                IAsyncResult asyncResult;
                if( state.UdpClient.Connected == true){
                    asyncResult = state.UdpClient.BeginSend(
                        state.QueryData, 0, state.QueryLength, 
                        SocketFlags.None,  UdpSendCompleted<TMessage>, state);
                }else {
                    asyncResult = state.UdpClient.BeginSendTo(
                        state.QueryData, 0, state.QueryLength, 
                        SocketFlags.None, state.UdpEndpoint, UdpSendCompleted<TMessage>, state);
                }
NSサーバー指定してAレコードのクエリ
		public List<System.Net.IPAddress>	ResolveAddress(
			DnsClient dns, string name, int timeout=50000 )
		{
			var msg = dns.Resolve (name);
			var addrs = msg.AnswerRecords
				.Where (a => a.RecordType == RecordType.A)
				.Select (a => ((ARecord)a).Address).ToList ();
			foreach(CNameRecord rec 
				in msg.AnswerRecords.Where( a => a.RecordType == RecordType.CName))
			{
				addrs = addrs.Concat(ResolveAddress(dns, rec.CanonicalName )).ToList();
			}
			return addrs.Distinct ().ToList ();
		}
		[Test]
		public void TestResolveByGoogle()
		{
			var google = new System.Net.IPAddress (new byte[4]{ 8, 8, 8, 8 });
			var addrs = ResolveAddress (
				            new DnsClient (google, 3000), 
				            "www.microsoft.com");
        }