diff options
author | gotoyuzo <gotoyuzo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-08-19 06:00:36 +0000 |
---|---|---|
committer | gotoyuzo <gotoyuzo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-08-19 06:00:36 +0000 |
commit | 65652ecdb5145fae92e3c86611a4425a476da6ec (patch) | |
tree | eedc2d207ffde1876c9d7271f8492741ee065584 /lib/webrick/server.rb | |
parent | 90e010abb9efeaaf706c363af31beedf65c8be3b (diff) | |
download | ruby-65652ecdb5145fae92e3c86611a4425a476da6ec.tar.gz |
* lib/webrick/ssl.rb: new file; SSL/TLS enhancement for GenericServer.
* lib/webrick/https.rb: SSLSocket handling is moved to webrick/ssl.rb.
* lib/webrick/compat.rb (File::fnmatch): remove old migration code.
* lib/webrick/httpserver.rb (HTTPServer#run): ditto.
* lib/webrick/server.rb (GenericServer#listen): the body of this
method is pull out as Utils::create_lisnteners.
* lib/webrick/utils.rb (Utils::create_lisnteners): new method.
* lib/webrick/server.rb (GenericServer#start): should not
through unknown errors. and refine comments.
* ext/openssl/lib/openssl/ssl.rb (SSLServer#accept): should close
socket if SSLSocket raises error.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4409 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/webrick/server.rb')
-rw-r--r-- | lib/webrick/server.rb | 38 |
1 files changed, 10 insertions, 28 deletions
diff --git a/lib/webrick/server.rb b/lib/webrick/server.rb index 911f78b66a..c71b118642 100644 --- a/lib/webrick/server.rb +++ b/lib/webrick/server.rb @@ -55,10 +55,9 @@ module WEBrick @logger.info("WEBrick #{webrickv}") @logger.info("ruby #{rubyv}") - if @config[:DoNotListen] - @listeners = [] - else - @listeners = listen(@config[:BindAddress], @config[:Port]) + @listeners = [] + unless @config[:DoNotListen] + listen(@config[:BindAddress], @config[:Port]) @config[:Listen].each{|addr, port| listen(addr, port).each{|sock| @listeners << sock } } @@ -70,26 +69,7 @@ module WEBrick end def listen(address, port) - res = Socket::getaddrinfo(address, port, - Socket::AF_UNSPEC, # address family - Socket::SOCK_STREAM, # socket type - 0, # protocol - Socket::AI_PASSIVE) # flag - last_error = nil - sockets = [] - res.each{|ai| - begin - @logger.debug("TCPServer.new(#{ai[3]}, #{ai[1]})") - sock = TCPServer.new(ai[3], ai[1]) - Utils::set_close_on_exec(sock) - sockets << sock - rescue => ex - @logger.warn("TCPServer Error: #{ex}") - last_error = ex - end - } - raise last_error if sockets.empty? - return sockets + @listeners += Utils::create_listeners(address, port, @logger) end def start(&block) @@ -117,12 +97,14 @@ module WEBrick } end rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPROTO => ex + # TCP connection was established but RST segment was sent + # from peer before calling TCPServer#accept. + rescue Errno::EBADF => ex + # if the listening socket was closed in GenericServer#shutdown, + # IO::select raise it. + rescue => ex msg = "#{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}" @logger.error msg - rescue Errno::EBADF => ex # IO::select causes by shutdown - rescue => ex - @logger.error ex - break end end |