protected virtual bool SuperiorAcquired(DnsRequest request, Action<BufferSegment, DnsResponse> answer) { Socket dns = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); try { dns.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1500); foreach (IPEndPoint dnsServer in this.m_dnsServer) { dns.SendTo(request.Message.Buffer, request.Message.Offset, request.Message.Length, SocketFlags.None, dnsServer); } byte[] response_data = new byte[Layer3Netif.MTU]; EndPoint server = dns.LocalEndPoint; dns.BeginReceiveFrom(response_data, 0, response_data.Length, SocketFlags.None, ref server, (ar) => { using (dns) { do { try { int response_length = dns.EndReceiveFrom(ar, ref server); if (response_length <= 0) { break; } DnsResponse response = DnsResponse.From(response_data, response_length); if (response == null) { break; } answer?.Invoke(new BufferSegment(response_data, 0, response_length), response); } catch (Exception) { } } while (false); dns.Close(); } }, null); return true; } catch (Exception) { dns.Close(); dns.Dispose(); return false; } }