I dug around a bit more in various Linux discussion boards and found a very interesting bug report in Fedora:
https://bugzilla.redhat.com/show_bug.cgi?id=459756. Therein, the infamous glibc maintainer Ulrich Drepper basically ignored a bunch of solid evidence that changes in the DNS lookup in glibc to better support mixed IPv6 and IPv4 networks very commonly lead to dropped DNS replies, so there are many delays or outright DNS failures. Ulrich also said the ISPs should fix buggy DNS servers and the rest of the world's apps should be recoded to request the host lookup the propper way.
Ulrich also seemed to ignore the a particularly cognizant observation that the poor DNS behavior started when glibc was changed to send essentially simultaneous IPv6 and IPv4 type DNS lookup requests out of the same originating IP port. Appearantly, earlier versions either did the lookup requests sequentially (e.g. maybe IPv4 first, then if no reply, IPv6; or vice-versa), or at least from differing originating ports.
On the same thread, several user config level work-arounds were suggested which basically suggested running a DNS caching process locally. But some people posted that their problems sometimes cleared up upon rebooting a router or firewall. Since my /etc/resolv.conf file had a line:
...
nameserver 192.168.{... the rest of my WAP/router's local IP addr ...}
I thought it may not be forwarding DNS requests and/or replies very well, so I logged into my WAP/router's admin page, found the DNS number provided by my ISP, then edited my /etc/resolv.conf file to now point to the ISP's DNS server address:
...
nameserver {my ISP-issued DNS IP address}
After this, AppBrowser and wget started working lightning quick again!
However, it was not so simple to have it permanently fixed. I realize now that my /etc/resolv.conf is getting modified upon reboot by a script I wrote for my wireless network setup. /opt/bootlocal.sh is modified to start my script /opt/wireless_start.sh. And wireless_start.sh invokes udhcpc, which rewrites /etc/resolv.conf. So I added another two lines to my wireless_start.sh to copy the wanted content (which I saved in a file named /opt/etc_resolv.conf) over the "bad" /etc/resolv.conf. The lines added to my wireless_start.sh script are (or these could probably be added to bootlocal.sh):
sleep 7
sudo cp -f /opt/etc_resolv.conf /etc/resolv.conf
The long sleep makes sure udhcpc is done mucking with /etc/resolv.conf, since it is running in the background, in parallel with the rest of the wireless_start.sh script. Not pretty, but it works!
If anyone here knows a more elegant way to do this, or at least how to prevent udhcpc rewriting the /etc/resolv.conf file, I'd appreciate hearing it.
Or if there is not a better way, maybe I should write this up as a Tips and Tricks post?
--
ML