|Subject:||Semantics of "retry" and "retrans" options has changed with 1.03|
1) A meaning of a "retry" option in Net::DNS::Resolver::new has changed between versions 1.02 and 1.03, while its documentations remains unchanged: retry print 'number of tries: ', $resolver->retry, "\n"; $resolver->retry(2); Get or set the number of times to try the query. The default is 4. Actually the "retry" in 1.02 and earlier meant the number of attempts (=tries, i.e. 4 transmissions, at its default value of 4), while with 1.03 the number of transmissions is one more, i.e. the semantics became: 1 first transmission + "retry" repeats, total of 5. The change is undocumented, and is unfortunate, as what could previously be achieved by retry=>1, retrans=>5 -> one send and a 5 second timeout, now became two sends with a total of 15 second timeout (5+10) on an unresponsive DNS server. 2) a meaning of "retrans" has changed too: in 1.02 and earlier one could achieve a single send and a one second timeout (waiting for a reply) by setting retry=>1, retrans=>0. Now with 1.03 the same setting causes rapid firing of retry+1 UDP packets and zero wait time, so in practice no answer is received unless the information is already in a cache of a fast and close DNS resolver. The documentation states: retrans Get or set the retransmission interval The default is 5 seconds. which does not mention doubling the interval with each attempt, and does not say that the last (again doubled) interval is the final timeout.