我一直在查看 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。是的,我确实认为对于一些微不足道的事情来说,所有这些都相当复杂 :-)2
2