* 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
This commit is contained in:
gotoyuzo 2007-12-18 14:43:03 +00:00
Родитель d99a343dfd
Коммит a04281ff0e
3 изменённых файлов: 19 добавлений и 4 удалений

Просмотреть файл

@ -1,3 +1,15 @@
Tue Dec 18 23:27:51 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
* 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@notwork.org>
* ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#shutdown):

Просмотреть файл

@ -34,6 +34,7 @@ module WEBrick
:StopCallback => nil,
:AcceptCallback => nil,
:DoNotReverseLookup => nil,
:ShutdownSocketWithoutClose => false,
}
# for HTTPServer, HTTPRequest, HTTPResponse ...

Просмотреть файл

@ -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