public string Lookup(string query, string queryType, HeaderFlags queryOptions = HeaderFlags.RecursionDesired) { UdpClient udpChannel = null; try { udpChannel = new UdpClient(LOCAL_PORT); Message dnsRequest = new Message(queryOptions); dnsRequest.AddQuery(query, (RecordType) Enum.Parse(typeof (RecordType), queryType, true)); byte[] requestDatagram = dnsRequest.AsByteArray(); int sendResult = udpChannel.Send(requestDatagram, requestDatagram.Length, _serverEndpoint); // Verify sendResult and throw exception if required.. byte[] responseDatagram = udpChannel.Receive(ref _serverEndpoint); Message dnsResponse = new Message(responseDatagram); Debug.Assert(dnsResponse.IsForRequest(dnsRequest)); // Could make it an [if(isForRequest) ... else retry/throw] if required.. return dnsResponse.AsString(); } finally { if(udpChannel != null) udpChannel.Close(); } }
internal bool IsForRequest(Message dnsRequest) { return _header.Id == dnsRequest._header.Id; }