… | |
… | |
316 | (join "", map _enc_qd, @{ $req->{qd} || [] }), |
316 | (join "", map _enc_qd, @{ $req->{qd} || [] }), |
317 | (join "", map _enc_rr, @{ $req->{an} || [] }), |
317 | (join "", map _enc_rr, @{ $req->{an} || [] }), |
318 | (join "", map _enc_rr, @{ $req->{ns} || [] }), |
318 | (join "", map _enc_rr, @{ $req->{ns} || [] }), |
319 | (join "", map _enc_rr, @{ $req->{ar} || [] }), |
319 | (join "", map _enc_rr, @{ $req->{ar} || [] }), |
320 | |
320 | |
321 | # (pack "C nnNn", 0, 41, 4000, 0, 0) # EDNS0, 4k udp payload size |
321 | # (pack "C nnNn", 0, 41, 4096, 0, 0) # EDNS0, 4kiB udp payload size |
322 | } |
322 | } |
323 | |
323 | |
324 | our $ofs; |
324 | our $ofs; |
325 | our $pkt; |
325 | our $pkt; |
326 | |
326 | |
… | |
… | |
698 | } |
698 | } |
699 | |
699 | |
700 | sub _recv { |
700 | sub _recv { |
701 | my ($self) = @_; |
701 | my ($self) = @_; |
702 | |
702 | |
703 | while (my $peer = recv $self->{fh}, my $res, 4000, 0) { |
703 | while (my $peer = recv $self->{fh}, my $res, 4096, 0) { |
704 | my ($port, $host) = Socket::unpack_sockaddr_in $peer; |
704 | my ($port, $host) = Socket::unpack_sockaddr_in $peer; |
705 | |
705 | |
706 | return unless $port == 53 && grep $_ eq $host, @{ $self->{server} }; |
706 | return unless $port == 53 && grep $_ eq $host, @{ $self->{server} }; |
707 | |
707 | |
708 | $self->_feed ($res); |
708 | $self->_feed ($res); |