Eleanor McHugh wrote: > On 22 Jun 2009, at 11:41, Roger Pack wrote: >> Currently ruby socket code defaults to always doing a reverse DNS lookup >> when it can [ex: once per incoming UDP packet]. >> This causes "surprising" pauses when the lookup fails, because the DNS >> waits 15s to timeout, before passing the packet back to the program, >> since the pause is unexpected. >> >> ex: http://betterlogic.com/roger/?p=1646 >> comment out the do_not_reverse_lookup on the receiver and change the >> sender to send to IP127.0.0.255 >> >> It works great [no pause]if you set BasicSocket.do_not_reverse_lookup to >> true, and is much less surprising. This isn't the first time I've been >> bit by ruby's internal packet DNS lookups and so thought I'd ask for >> feedback before suggesting to core that it be turned off by default. >> >> The other benefit is that with DNS lookups, sometimes they succeed, and >> sometimes fail, which means that normal code could run into unexpected >> pauses when put into production--which is surprising and unwanted, >> really. >> >> Thoughts on this one? >> Thanks. > > I tend to agree with you on this although I'd also suggest that the > option become do_reverse_lookup if it's going to default to false, that > avoids having to read lots of code peppered with do_not_reverse_lookup = > false when a reverse lookup is desired. Double negatives are a > guaranteed way to scramble frazzled brains :) +1 on both suggestions I've been bit by this reverse lookup in the past. Even when setting Net::HTTP's open_timeout, this has no effect on the rDNS lookup so an operation with a timeout of 1s can actually time out after 15s. Very confusing. And really, minimizing unnecessary reverse lookups is better for the health of the internet in general. Daniel