Front page | perl.perl5.porters |
Postings from April 2010
IO modules causing issues in Net::DNS module?
Thread Next
From:
Richard Alloway
Date:
April 9, 2010 04:47
Subject:
IO modules causing issues in Net::DNS module?
Message ID:
FE49E8AE303A3D4D889ACBDFB351D08AFC0263@corexchange5.corp.clearwire.com
Hi!
I'm porting some software from a White Russian OpenWRT system to a new Kamikaze 8.09.1 OpenWRT system but I am having some serious issues that I'm hoping you can help me with.
Old system
Linux kernel 2.4.34
MIPSEL arch
Perl 5.8.7
Net::DNS 0.48
IO 1.21
IO::Socket 1.28
IO::Socket::INET 1.28
New system
Linux kernel 2.6.26.8
MIPS arch
Perl 5.10.0
Net::DNS 0.66
IO 1.23_01
IO::Socket 1.30_01
IO::Socket::INET 1.31
First, let me provide some background information...
I am trying to resolve my server (clearprobe.winbeam.com) from within my Perl program and see the following if I enable debugging in Net::DNS:
resolve: Server 'clearprobe-ddns.winbeam.com'
;; query(clearprobe-ddns.winbeam.com)
;; setting up an AF_INET() family type UDP socket
;; send_udp(192.168.88.1:53)
;; send_udp(4.2.2.2:53)
;; send_udp(192.168.88.1:53)
;; send_udp(4.2.2.2:53)
resolve: res->errorstring: query timed out
Both of these servers resolve clearprobe.winbeam.com fine from the command line:
root@cwb-2-11:~# echo "nameserver 192.168.88.1" > /etc/resolv.conf
root@cwb-2-11:~# nslookup clearprobe-ddns.winbeam.com
Server: 192.168.88.1
Address 1: 192.168.88.1 router
Name: clearprobe-ddns.winbeam.com
Address 1: 64.13.48.40 64-13-48-40.war.clearwire-dns.net
root@cwb-2-11:~# echo "nameserver 4.2.2.2" > /etc/resolv.conf
root@cwb-2-11:~# nslookup clearprobe-ddns.winbeam.com
Server: 4.2.2.2
Address 1: 4.2.2.2 vnsc-bak.sys.gtei.net
Name: clearprobe-ddns.winbeam.com
Address 1: 64.13.48.40 64-13-48-40.war.clearwire-dns.net
Using Perl's call to the C gethostbyaddr() function works fine, but I need to do another lookup later in the software which requires that I specify the nameserver (clearprobe-ddns.winbeam.com is the authority for my internal DNS zone), hence my Net::DNS requirement.
Now, here is the IO module-specific information:
What I am seeing is that the reply is coming back from the nameserver (confirmed via tcpdump - I can send the captures if you'd like), but the UDP packets are sitting in the process's UDP receive queue pending reception by Net::DNS (the approx 1752 bytes per response stay queued waiting for $sel->can_read()):
root@cwb-2-11:~# netstat -una
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 1752 0 0.0.0.0:52680 0.0.0.0:*
root@cwb-2-11:~# netstat -una
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 5256 0 0.0.0.0:52680 0.0.0.0:*
If I force $sock[AF_INET]->recv($buf, $self->_packetsz) around line 803 of /usr/lib/perl5/5.10/Net/DNS/Resolver/Base.pm, instead of waiting for IO::Select's can_read() function ( @ready = $sel->can_read($timeout)) to populate @ready, the response is received and processed.
Any idea what could be causing this issue?
In a possibly related matter, I noticed in another script that the following code fails in the same manner (network responses stay in the process's TCP receive queue) with the new system:
$sock = new IO::Socket::INET(
PeerAddr => "$server",
PeerPort => 37,
Proto => 'tcp',
Timeout => 5
);
Whereas the following code works:
$sock = new IO::Socket::INET(
PeerAddr => "$server",
PeerPort => 37,
Proto => 'tcp'
);
I have looked through the NET::DNS code and don't see a timeout passed for the UDP sockets, so I am not sure if that this is related or not.
Please let me know if I can provide you with any further information in order to help diagnose this issue.
Thanks!
Richard D Alloway
N3WWN
clearw°re
Network OSS & Tools | Suite 2, 300 S Hamilton St, Greensburg, PA 15601
Office: 724.219.0408 | Fax: 724.853.0361
Email OSS Support <mailto:Email%20OSS%20Support> at networkosssupport@clearwire.com
Email Bird/ClearProbe requests to oss-birdteam@clearwire.com
This email may contain confidential and privileged material for the sole use of the intended recipient. Any review, use, distribution or disclosure by others is strictly prohibited. If you are not the intended recipient (or authorized to receive for the recipient), please contact the sender by reply email and delete all copies of this message.
Thread Next
-
IO modules causing issues in Net::DNS module?
by Richard Alloway