LumiSoft.Net.Dns.Client.Dns_Client.QueryServer C# (CSharp) Method

QueryServer() private method

Sends query to server.
private QueryServer ( string qname, QTYPE qtype, int qclass ) : DnsServerResponse
qname string Query text.
qtype QTYPE Query type.
qclass int Query class.
return DnsServerResponse
        private DnsServerResponse QueryServer(string qname,QTYPE qtype,int qclass)
        {
            if(m_DnsServers == null || m_DnsServers.Length == 0){
                throw new Exception("Dns server isn't specified !!!");
            }

            // See if query is in cache
            if(m_UseDnsCache){
                DnsServerResponse resopnse = DnsCache.GetFromCache(qname,(int)qtype);
                if(resopnse != null){
                    return resopnse;
                }
            }

            int queryID = Dns_Client.ID;
            byte[] query = CreateQuery(queryID,qname,qtype,qclass);

            int helper = 0;
            for(int i=0;i<(m_DnsServers.Length * 2);i++){
                if(helper >= m_DnsServers.Length){
                    helper = 0;
                }

                try{
                    Socket udpClient = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
                    udpClient.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,10000);
                    udpClient.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.SendTimeout,10000);
                    udpClient.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.NoDelay,1);

                    udpClient.Connect(new IPEndPoint(IPAddress.Parse(m_DnsServers[helper]),53));

                    //send query
                    udpClient.Send(query);

                    byte[] retVal = new byte[512];
                    int countRecieved = udpClient.Receive(retVal);

                    udpClient.Close();

                    // If reply is ok, return it
                    DnsServerResponse serverResponse = ParseQuery(retVal,queryID);

                    // Cache query
                    if(m_UseDnsCache && serverResponse.ResponseCode == RCODE.NO_ERROR){
                        DnsCache.AddToCache(qname,(int)qtype,serverResponse);
                    }

                    return serverResponse;
                }
                catch{
                }

                helper++;
            }

            // If we reach so far, we probably won't get connection to dsn server
            return new DnsServerResponse(false,RCODE.SERVER_FAILURE,null,null,null);
        }