From: Roger Pack Date: 2009-07-10T13:41:51+09:00 Subject: [ruby-core:24247] RCR: BasicSocket.do_not_reverse_lookup = true by default. Currently ruby socket code defaults to always doing reverse DNS lookup when it can [ex: once per incoming UDP packet, once per TCP connection]. This causes "surprising" pauses whenever lookup fails, because the DNS waits 15s to timeout, before passing the packet back to the program, since the pause is unexpected. example of this: http://betterlogic.com/roger/?p=1646 comment out the do_not_reverse_lookup=true line 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 example isn't the first time I've been bit by ruby's internal reverse lookups and they still surprise me, so thought I'd suggest it. Feedback from ruby-talk on the subject was positive [1]. 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. It also causes surprises when going from platform to platform [2], and results in increased network traffic. The followup thought would be that to rename it BasicSocket.reverse_lookup = true would be good to avoid having to use the double negative, but that is purely optional--having both might be better. Thoughts? =r [1] http://www.ruby-forum.com/topic/190013#new [2] http://www.ruby-forum.com/topic/191022#833168