ruby-changes:2816
From: ko1@a...
Date: 18 Dec 2007 23:50:04 +0900
Subject: [ruby-changes:2816] gotoyuzo - Ruby:r14306 (trunk): * lib/webrick/server.rb (WEBrick::GenericServer#accept_client):
gotoyuzo 2007-12-18 23:43:03 +0900 (Tue, 18 Dec 2007) New Revision: 14306 Modified files: trunk/ChangeLog trunk/lib/webrick/config.rb trunk/lib/webrick/server.rb Log: * 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. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14306&r2=14305 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/webrick/config.rb?r1=14306&r2=14305 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/webrick/server.rb?r1=14306&r2=14305 Index: ChangeLog =================================================================== --- ChangeLog (revision 14305) +++ ChangeLog (revision 14306) @@ -1,3 +1,15 @@ +Tue Dec 18 23:27:51 2007 GOTOU Yuuzou <gotoyuzo@n...> + + * 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 <gotoyuzo@n...> * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#shutdown): Index: lib/webrick/config.rb =================================================================== --- lib/webrick/config.rb (revision 14305) +++ lib/webrick/config.rb (revision 14306) @@ -34,6 +34,7 @@ :StopCallback => nil, :AcceptCallback => nil, :DoNotReverseLookup => nil, + :ShutdownSocketWithoutClose => false, } # for HTTPServer, HTTPRequest, HTTPResponse ... Index: lib/webrick/server.rb =================================================================== --- lib/webrick/server.rb (revision 14305) +++ lib/webrick/server.rb (revision 14306) @@ -129,7 +129,10 @@ 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 @@ 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 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml