… | |
… | |
26 | |
26 | |
27 | =cut |
27 | =cut |
28 | |
28 | |
29 | package AnyEvent::DNS; |
29 | package AnyEvent::DNS; |
30 | |
30 | |
31 | no warnings; |
|
|
32 | use strict; |
|
|
33 | |
|
|
34 | use Carp (); |
31 | use Carp (); |
35 | use Socket qw(AF_INET SOCK_DGRAM SOCK_STREAM); |
32 | use Socket qw(AF_INET SOCK_DGRAM SOCK_STREAM); |
36 | |
33 | |
37 | use AnyEvent (); |
34 | use AnyEvent (); BEGIN { AnyEvent::common_sense } |
38 | use AnyEvent::Util qw(AF_INET6); |
35 | use AnyEvent::Util qw(AF_INET6); |
39 | |
36 | |
40 | our $VERSION = 4.81; |
37 | our $VERSION = 4.881; |
41 | |
38 | |
42 | our @DNS_FALLBACK = (v208.67.220.220, v208.67.222.222); |
39 | our @DNS_FALLBACK = (v208.67.220.220, v208.67.222.222); |
43 | |
40 | |
44 | =item AnyEvent::DNS::a $domain, $cb->(@addrs) |
41 | =item AnyEvent::DNS::a $domain, $cb->(@addrs) |
45 | |
42 | |
… | |
… | |
379 | |
376 | |
380 | sub _enc_name($) { |
377 | sub _enc_name($) { |
381 | pack "(C/a*)*", (split /\./, shift), "" |
378 | pack "(C/a*)*", (split /\./, shift), "" |
382 | } |
379 | } |
383 | |
380 | |
|
|
381 | if ($[ < 5.008) { |
|
|
382 | # special slower 5.6 version |
|
|
383 | *_enc_name = sub { |
|
|
384 | join "", map +(pack "C/a*", $_), (split /\./, shift), "" |
|
|
385 | }; |
|
|
386 | } |
|
|
387 | |
384 | sub _enc_qd() { |
388 | sub _enc_qd() { |
385 | (_enc_name $_->[0]) . pack "nn", |
389 | (_enc_name $_->[0]) . pack "nn", |
386 | ($_->[1] > 0 ? $_->[1] : $type_id {$_->[1]}), |
390 | ($_->[1] > 0 ? $_->[1] : $type_id {$_->[1]}), |
387 | ($_->[2] > 0 ? $_->[2] : $class_id{$_->[2] || "in"}) |
391 | ($_->[2] > 0 ? $_->[2] : $class_id{$_->[2] || "in"}) |
388 | } |
392 | } |
… | |
… | |
845 | } |
849 | } |
846 | |
850 | |
847 | sub _parse_resolv_conf_file { |
851 | sub _parse_resolv_conf_file { |
848 | my ($self, $resolv_conf) = @_; |
852 | my ($self, $resolv_conf) = @_; |
849 | |
853 | |
850 | open my $fh, "<:perlio", $resolv_conf |
854 | open my $fh, "<", $resolv_conf |
851 | or Carp::croak "$resolv_conf: $!"; |
855 | or Carp::croak "$resolv_conf: $!"; |
852 | |
856 | |
853 | local $/; |
857 | local $/; |
854 | $self->parse_resolv_conf (<$fh>); |
858 | $self->parse_resolv_conf (<$fh>); |
855 | } |
859 | } |
… | |
… | |
1077 | } |
1081 | } |
1078 | }]; |
1082 | }]; |
1079 | |
1083 | |
1080 | my $sa = AnyEvent::Socket::pack_sockaddr (DOMAIN_PORT, $server); |
1084 | my $sa = AnyEvent::Socket::pack_sockaddr (DOMAIN_PORT, $server); |
1081 | |
1085 | |
1082 | my $fh = AF_INET == Socket::sockaddr_family ($sa) |
1086 | my $fh = AF_INET == AnyEvent::Socket::sockaddr_family ($sa) |
1083 | ? $self->{fh4} : $self->{fh6} |
1087 | ? $self->{fh4} : $self->{fh6} |
1084 | or return &$do_retry; |
1088 | or return &$do_retry; |
1085 | |
1089 | |
1086 | send $fh, $req->[0], 0, $sa; |
1090 | send $fh, $req->[0], 0, $sa; |
1087 | }; |
1091 | }; |