UDPSocket#recvfromの逆引きタイムアウト待ちをなくす
DNSのない閉じたネットワークでUDPSocketを使ったプログラムを動作させていると、パケットが届いてからrecvfromメソッドで読み込まれるまで数秒間の遅延が発生していました。
調べたところ、Rubyのソケットではデータ受信時に送信アドレスのホスト名の逆引きを行っているようで、DNSのない環境ではそれのタイムアウト待ちが発生していたということだそうです。
以下の一行を追加すれば、その逆引きを行わないようにすることができます。
UDPSocket.do_not_reverse_lookup = true
これはUDPSocketではなく、Rubyのソケット全般(BasicSocket)で定義されているようです。
ちなみに、
Socket.do_not_reverse_lookup = true しておけば逆引きしないはずで す。1.9ならソケットごとに設定できますが、1.8では一括でしかできま せん。
[http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/43960:title=[ruby-list:43960] Re: UDPSocket#recvfromが遅い]
とのこと。