かわじ、です
サーバーとして公開すると、逆引きできない相手からの応答がすごく遅延して
他からの接続にも影響するようなので、Apache の HostnameLookups を取り入れ
てみました。
以下の patch は簡便のために、制約があります。
* 設定は server ごとではなくグローバルなので、最後に起動された server
の設定に依存されます。真に逆引きが必要な部分だけ Resolv を使うことに
すれば、解決できるのではと思います。
http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=Resolv
* デフォルトは true (逆引きをする)です。出来れば false にしたいの
ですが、互換性から言うと難しいかもしれませんね。
server = WEBrick::HTTPServer.new({
:HostnameLookups => false,
# ...
})
Index: lib/webrick/config.rb
===================================================================
RCS file: /src/ruby/lib/webrick/config.rb,v
retrieving revision 1.2
diff -u -r1.2 config.rb
--- lib/webrick/config.rb 8 Sep 2003 09:52:33 -0000 1.2
+++ lib/webrick/config.rb 28 Jan 2004 07:30:56 -0000
@@ -30,6 +30,7 @@
"(Ruby/#{RUBY_VERSION}/#{RUBY_RELEASE_DATE})",
:TempDir => ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'/tmp',
:DoNotListen => false,
+ :HostnameLookups => true, # reverse lookup
:StartCallback => nil,
:StopCallback => nil,
:AcceptCallback => nil,
Index: lib/webrick/server.rb
===================================================================
RCS file: /src/ruby/lib/webrick/server.rb,v
retrieving revision 1.5
diff -u -r1.5 server.rb
--- lib/webrick/server.rb 4 Dec 2003 00:12:14 -0000 1.5
+++ lib/webrick/server.rb 28 Jan 2004 07:30:56 -0000
@@ -55,6 +55,8 @@
@logger.info("WEBrick #{webrickv}")
@logger.info("ruby #{rubyv}")
+ BasicSocket.do_not_reverse_lookup = !(@config[:HostnameLookups])
+
@listeners = []
unless @config[:DoNotListen]
if @config[:Listen]