summaryrefslogtreecommitdiff
path: root/lib/webrick/httpserver.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/webrick/httpserver.rb')
-rw-r--r--lib/webrick/httpserver.rb28
1 files changed, 22 insertions, 6 deletions
diff --git a/lib/webrick/httpserver.rb b/lib/webrick/httpserver.rb
index ddf1ac7404..e46b3bd1ad 100644
--- a/lib/webrick/httpserver.rb
+++ b/lib/webrick/httpserver.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: false
#
# httpserver.rb -- HTTPServer Class
#
@@ -8,6 +9,7 @@
#
# $IPR: httpserver.rb,v 1.63 2002/10/01 17:16:32 gotoyuzo Exp $
+require 'io/wait'
require 'webrick/server'
require 'webrick/httputils'
require 'webrick/httpstatus'
@@ -72,11 +74,11 @@ module WEBrick
begin
timeout = @config[:RequestTimeout]
while timeout > 0
- break if IO.select([sock], nil, nil, 0.5)
- timeout = 0 if @status != :Running
+ break if sock.to_io.wait_readable(0.5)
+ break if @status != :Running
timeout -= 0.5
end
- raise HTTPStatus::EOFError if timeout <= 0
+ raise HTTPStatus::EOFError if timeout <= 0 || @status != :Running
raise HTTPStatus::EOFError if sock.eof?
req.parse(sock)
res.request_method = req.request_method
@@ -138,6 +140,10 @@ module WEBrick
si.service(req, res)
end
+ ##
+ # The default OPTIONS request handler says GET, HEAD, POST and OPTIONS
+ # requests are allowed.
+
def do_OPTIONS(req, res)
res["allow"] = "GET,HEAD,POST,OPTIONS"
end
@@ -207,6 +213,10 @@ module WEBrick
}
end
+ ##
+ # Logs +req+ and +res+ in the access logs. +config+ is used for the
+ # server name.
+
def access_log(config, req, res)
param = AccessLog::setup_params(config, req, res)
@config[:AccessLog].each{|logger, fmt|
@@ -214,7 +224,13 @@ module WEBrick
}
end
- class MountTable
+ ##
+ # Mount table for the path a servlet is mounted on in the directory space
+ # of the server. Users of WEBrick can only access this indirectly via
+ # WEBrick::HTTPServer#mount, WEBrick::HTTPServer#unmount and
+ # WEBrick::HTTPServer#search_servlet
+
+ class MountTable # :nodoc:
def initialize
@tab = Hash.new
compile
@@ -251,12 +267,12 @@ module WEBrick
k.sort!
k.reverse!
k.collect!{|path| Regexp.escape(path) }
- @scanner = Regexp.new("^(" + k.join("|") +")(?=/|$)")
+ @scanner = Regexp.new("\\A(" + k.join("|") +")(?=/|\\z)")
end
def normalize(dir)
ret = dir ? dir.dup : ""
- ret.sub!(%r|/+$|, "")
+ ret.sub!(%r|/+\z|, "")
ret
end
end