使用Apple的AsyncDNSResolver(),我需要更改选项服务器和timeoutMillis。 CAresDNSResolver.Options 未初始化

问题描述 投票:0回答:1

我正在使用 Apple 的 AsyncDNSResolver(GitHub 链接),并希望在创建

CAresDNSResolver.Options
时指定
AsyncDNSResolver(options:)
(要查询的超时 (2) 和名称服务器 (3)) (1) 问题是当我初始化
var options: CAresDNSResolver.Options = CAresDNSResolver.Options()
我收到 Xcode 错误
'CAresDNSResolver.Options' initializer is inaccessible due to 'internal' protection level

我要求的是一种初始化选项结构的方法,以便我可以将其传递给 AsyncDNSResolver()。如果不可用,AsyncDNSResolver 将在其查询中使用设置名称服务器的方法。

谢谢你。

这是该功能,除了当我想设置选项时之外,都可以工作:

func getDmarcTxtWithDomainName(domainName: String, altDnsServer: String = "") async throws -> String {
    var dmarcString: String
    var resolver: AsyncDNSResolver
    do {
        
        if altDnsServer.isEmpty {
            resolver = try AsyncDNSResolver()
        } else {
            // TODO: set the resolver to use altDnsServer and timeout
            var options: CAresDNSResolver.Options = CAresDNSResolver.Options() // (1)
            options.servers = [altDnsServer]                                   // (2)
            options.timeoutMillis = 2000.                                      // (3)
            resolver = try AsyncDNSResolver(options: options)
       }
        let txtRecords = try await resolver.queryTXT(name: domainName)
        if txtRecords.count > 0 {
            dmarcString = subStringInTxtRecords(subString: "v=DMARC", txtRecords: txtRecords)
            if dmarcString.count == 0 {
                dmarcString = "None found"
            }
        } else {
            dmarcString = "None found"
        }
    } catch {
        debugLog(object: error.localizedDescription)
        throw error
    }
    return dmarcString
}

swift dns
1个回答
0
投票

问题出在

var options
的创建上。将行更改为:

            var options = CAresDNSResolver.Options.default

解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.