実験してみますたが,retry が 0 だとパケットが飛ばないようです.
retry を 1 にするとパケットは飛びますが,しかし鯖からの反応がないと
10 秒待ってしまう......どうも,udp_timeout が 0 だと undef と同じ扱い
(この場合 retrans を基準にする)になってしまうようで.そこで
retrans を 0 にしても 2 秒待ってしまう...... どうやら,$res->query() を
使う限りは nonblocking にはできないようで.なので,代わりに
$res->bgsend() を使うのがいいのではないかと
(この場合 timeout 等の設定は不要).

        use Net::DNS;
        my $res = Net::DNS::Resolver->new(recurse => 0, nameservers => [$nameserver]);
        $res->bgsend($host);

こんな感じで.