testDns method

Future<List<DnsTestResult>> testDns({
  1. String domain = 'www.google.com',
  2. List<String> dnsServers = const <String>['1.1.1.1', '8.8.8.8', '114.114.114.114'],
  3. Duration? timeout,
  4. bool concurrent = true,
  5. bool includeSystemResolver = false,
})

依次/并发测试多台 DNS 服务器 / Tests multiple DNS servers.

concurrenttrue(默认)时并发查询;为 false 时按顺序查询,可用于 规避部分网络对并发 UDP 的限制 / concurrent queries in parallel by default; set it to false to serialise them. includeSystemResolvertrue 时额外加入一条系统解析器结果 / includeSystemResolver also appends a platform-resolver result.

Implementation

Future<List<DnsTestResult>> testDns({
  String domain = 'www.google.com',
  List<String> dnsServers = const <String>[
    '1.1.1.1',
    '8.8.8.8',
    '114.114.114.114',
  ],
  Duration? timeout,
  bool concurrent = true,
  bool includeSystemResolver = false,
}) async {
  final servers = <String>[
    if (includeSystemResolver) 'system',
    ...dnsServers,
  ];
  if (servers.isEmpty) return const <DnsTestResult>[];

  if (concurrent) {
    return Future.wait(
      servers.map(
        (server) => query(domain: domain, server: server, timeout: timeout),
      ),
    );
  }

  final results = <DnsTestResult>[];
  for (final server in servers) {
    results.add(
      await query(domain: domain, server: server, timeout: timeout),
    );
  }
  return results;
}