dig +tries=x 和 dig +retries=x 有什么区别?

dig +tries=x 和 dig +retries=x 有什么区别?

我一直在查看 dig 文档,但不明白 dig +tries=x 和 dig +retries=x 之间的区别。有人能解释一下吗?

答案1

在这种情况下,您可能需要首先指定dig您正在讨论的版本,以避免任何可能的歧义。

在我的版本中,我只有+tries+retry(注意是单数,而不是复数),并且手册页上的行+retry具体说了与+tries哪个相关的内容:

此选项将向服务器重试 UDP 查询的次数设置为 T,而不是默认值 2。与 +tries 不同,这不包括初始查询。

如果你研究它的源代码,https://gitlab.isc.org/isc-projects/bind9/-/blob/9c8b7a5c450d54332f25830aa47035d87490bb3a/bin/dig/dig.c对于最新版本,你可以看到比这更“简单”的真相(显示两个选项实际上作用于同一个变量)

case 'r':
        switch (cmd[1]) {
[..]
        case 'e':
            switch (cmd[2]) {
[..]
            case 't': /* retry / retries */
[..]
                result = parse_uint(&lookup->retries, value,
                            MAXTRIES - 1, "retries");
                if (result != ISC_R_SUCCESS) {
                    warn("Couldn't parse retries");
                    goto exit_or_usage;
                }

                lookup->retries++;

[..]

case 't':
        switch (cmd[1]) {
[..]
        case 'r':
            switch (cmd[2]) {
[..]
            case 'i': /* tries */
[..]
                result = parse_uint(&lookup->retries, value,
                            MAXTRIES, "tries");
                if (result != ISC_R_SUCCESS) {
                    warn("Couldn't parse tries");
                    goto exit_or_usage;
                }
                if (lookup->retries == 0) {
                    lookup->retries = 1;
                }
                break;

因此retry(或者retries实际上)设置lookup->retries值然后增加它,而tries只是将值设置为给定的值。tries给出要执行的总尝试次数,而retry给出第一次失败后要执行的尝试次数,因此总尝试次数是该次数加一。同样的事情,只是不同的 API/语义。

FWIW,lookup->retries在其他地方(在上述之前)初始化,如下所示:

int tries = 3;

[..]

    *looknew = (dig_lookup_t){
[..]
        .retries = tries,

这解释了手册页中的3内容,因为这是重试次数,因此在第一次尝试之后,默认情况下尝试的总次数为 3。是的,我确实认为对于一些微不足道的事情来说,所有这些都相当复杂 :-)22

相关内容