В чем разница между dig + try = x и dig + retries = x?

Я просматривал документацию по раскопкам и не понимаю разницы между dig + try = x и dig + retries = x. Может кто-нибудь объяснить, пожалуйста?

1
задан 29 April 2021 в 02:57
1 ответ

В подобных случаях вы можете начать с указания версии dig . говорить о том, чтобы избежать возможных двусмысленностей.

В моей версии у меня есть только + попытки и + повтор (обратите внимание на единственное, а не множественное число), а в строке справочной страницы на + retry конкретно говорится о чем-то связанном to + пытается , то есть:

Эта опция устанавливает количество повторных попыток UDP-запросов к серверу, равное T вместо значения по умолчанию, 2. В отличие от + попыток, это не включает начальный запрос.

Если вы изучите его исходный код, посетите 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-> повторяет значение, а затем увеличивает его, а пытается просто устанавливает значение, которое было задано. пытается дает общее количество попыток сделать, а retry дает количество попыток сделать после первого сбоя, так что общее количество попыток равно плюс одному. {{1 }} То же самое, только другой API / семантика.

FWIW, lookup-> retries инициализируется в другом месте (перед указанным выше) следующим образом:

int tries = 3;

[..]

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

Этот 3 объясняет 2 на странице руководства поскольку 2 - это количество повторных попыток, поэтому после первой попытки общее количество попыток по умолчанию будет равно 3. Да, я действительно думаю, что все это довольно запутанно для чего-то тривиального: -)

1
ответ дан 7 May 2021 в 19:08

Теги

Похожие вопросы