From a04281ff0e3f1dc0f6584102b94f88403ff35520 Mon Sep 17 00:00:00 2001 From: gotoyuzo Date: Tue, 18 Dec 2007 14:43:03 +0000 Subject: * lib/webrick/server.rb (WEBrick::GenericServer#accept_client): should rescue Errno::EINVAL from TCPServer#accept. this exception might occur if the server socket is not in ready to listen. * lib/webrick/server.rb (WEBrick::GenericServer#accept_client): don't call TCPServer#close if the :ShutdownSocketWithoutClose is set. * lib/webrick/config.rb (WEBrick::Config::General): add new parameter :ShutdownSocketWithoutClose. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14306 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 12 ++++++++++++ lib/webrick/config.rb | 1 + lib/webrick/server.rb | 10 ++++++---- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index eba688385c..c5d390ed02 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +Tue Dec 18 23:27:51 2007 GOTOU Yuuzou + + * lib/webrick/server.rb (WEBrick::GenericServer#accept_client): + should rescue Errno::EINVAL from TCPServer#accept. this exception + might occur if the server socket is not in ready to listen. + + * lib/webrick/server.rb (WEBrick::GenericServer#accept_client): + don't call TCPServer#close if the :ShutdownSocketWithoutClose is set. + + * lib/webrick/config.rb (WEBrick::Config::General): add new parameter + :ShutdownSocketWithoutClose. + Tue Dec 18 22:51:47 2007 GOTOU Yuuzou * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#shutdown): diff --git a/lib/webrick/config.rb b/lib/webrick/config.rb index 10db6e0944..121669c13a 100644 --- a/lib/webrick/config.rb +++ b/lib/webrick/config.rb @@ -34,6 +34,7 @@ module WEBrick :StopCallback => nil, :AcceptCallback => nil, :DoNotReverseLookup => nil, + :ShutdownSocketWithoutClose => false, } # for HTTPServer, HTTPRequest, HTTPResponse ... diff --git a/lib/webrick/server.rb b/lib/webrick/server.rb index 3adbded5fa..54375d2e7d 100644 --- a/lib/webrick/server.rb +++ b/lib/webrick/server.rb @@ -129,7 +129,10 @@ module WEBrick addr = s.addr @logger.debug("close TCPSocket(#{addr[2]}, #{addr[1]})") end - s.close + s.shutdown + unless @config[:ShutdownSocketWithoutClose] + s.close + end } @listeners.clear end @@ -147,9 +150,8 @@ module WEBrick sock.sync = true Utils::set_non_blocking(sock) Utils::set_close_on_exec(sock) - 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::ECONNRESET, Errno::ECONNABORTED, + Errno::EPROTO, Errno::EINVAL => ex rescue Exception => ex msg = "#{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}" @logger.error msg -- cgit v1.2.3