public DnsAnswer QueryServer(RecordType recType, int timeout) { if (_dnsServer == null) throw new DnsQueryException("There is no Dns server set in Dns Query Component", null); if (!ValidRecordType(recType)) throw new DnsQueryException("Invalid Record Type submitted to Dns Query Component", null); //Result object DnsAnswer res = null; //UDP being unreliable we may need to try multiple times //therefore we count how many times we have tried _numTries = 0; //as per RFC 1035 there is a max size on the dns response byte[] dnsResponse = new byte[512]; Exception[] exceptions = new Exception[MAX_TRIES]; while (_numTries < MAX_TRIES) { try { CreateDnsQuery(recType); _reqSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); _reqSocket.ReceiveTimeout = timeout; _reqSocket.SendTo(_query, _query.Length, SocketFlags.None, _dnsServer); _reqSocket.Receive(dnsResponse); if (dnsResponse[0] == _query[0] && dnsResponse[1] == _query[1]) //this is our response so format and return the answer to the query res = new DnsAnswer(dnsResponse); _numTries++; if (res.ReturnCode == ReturnCode.Success) return res; } catch (SocketException ex) { exceptions[_numTries] = ex; _numTries++; _reqId++; if (_numTries > MAX_TRIES) throw new DnsQueryException("Failure Querying DNS Server", exceptions); } finally { _reqId++; _reqSocket.Close(); Query = null; //Force a new message be built } } return res; }
public DnsAnswer QueryServer(RecordType recType, int timeout) { if (_dnsServer == null) { throw new DnsQueryException("There is no Dns server set in Dns Query Component", null); } if (!ValidRecordType(recType)) { throw new DnsQueryException("Invalid Record Type submitted to Dns Query Component", null); } //Result object DnsAnswer res = null; //UDP being unreliable we may need to try multiple times //therefore we count how many times we have tried _numTries = 0; //as per RFC 1035 there is a max size on the dns response byte[] dnsResponse = new byte[512]; Exception[] exceptions = new Exception[MAX_TRIES]; while (_numTries < MAX_TRIES) { try { CreateDnsQuery(recType); _reqSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); _reqSocket.ReceiveTimeout = timeout; _reqSocket.SendTo(_query, _query.Length, SocketFlags.None, _dnsServer); _reqSocket.Receive(dnsResponse); if (dnsResponse[0] == _query[0] && dnsResponse[1] == _query[1]) { //this is our response so format and return the answer to the query res = new DnsAnswer(dnsResponse); } _numTries++; if (res.ReturnCode == ReturnCode.Success) { return(res); } } catch (SocketException ex) { exceptions[_numTries] = ex; _numTries++; _reqId++; if (_numTries > MAX_TRIES) { throw new DnsQueryException("Failure Querying DNS Server", exceptions); } } finally { _reqId++; _reqSocket.Close(); Query = null; //Force a new message be built } } return(res); }