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