-
Notifications
You must be signed in to change notification settings - Fork 95
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Handle OpenSSL::SSL:SSLError #71
Comments
In HTTPS server sinario, server.rb has two different rescues depend on execption types during
The possible options for your suggestion may be:
Option 1 seems hard to accept because WEBrick does not provide error-specific handling convention at the socket layer. In my opinion, it's common to send unintended incorrect packets or requests to a server under development. Because I want webrick to report these errors as logs, I like the current behavior, option 3. By the way, as the code you refered looks slightly old version, I reproduced the situation with webrick-1.7.0, current latest version of gem, as follows.
and open with nc command and kill by Ctrl+c from another terminal
then I got the same error on the first terminal
The error raised at line 302 and rescued at 316 of |
But does it need to be at the error level? Looking at https://en.wikipedia.org/wiki/Syslog#Severity_level I wonder if it we can't downgrade it to a lower level. My problem is mostly that this service is used in production and these are conditions that fill the logs. However, there's little an admin can do about this. Ignoring errors in logs is a bad practice, but right now there's little other choice. |
Indeed. What do you think of debug level log? --- a/lib/webrick/server.rb
+++ b/lib/webrick/server.rb
@@ -313,6 +313,8 @@ module WEBrick
rescue ServerError => ex
msg = "#{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}"
@logger.error msg
+ rescue OpenSSL::SSL::SSLError => ex
+ @logger.debug ex
rescue Exception => ex
@logger.error ex
ensure It is not immediately clear to me whether |
Yes, that would solve my problem. And I suspect you could be right that OpenSSL may not be available. At least, I've seen code in Puma that explicitly tries to deal with a Ruby that wasn't linked against OpenSSL. Perhaps it should be something like: rescue Exception => ex
if defined?(OpenSSL::SSL::SSLError) && ex.is_a?(OpenSSL::SSL::SSLError)
@logger.debug(ex)
else
@logger.error(ex)
end Disclaimer: this is the first code I write on a Monday morning so don't expect it to literally work but I'm sure you get the idea. |
We use a server config where Webrick also handles HTTPS. When a connection is aborted, an exception is logged. For example:
This comes from:
webrick/lib/webrick/server.rb
Lines 252 to 277 in 3515081
It does look like various basic network errors are caught and ignored, but SSL errors can fall in the same category (such as this one). Not everything should be logged at the error level. I'm not sure how it should exactly be dealt with (or I'd submit a patch instead of a PR) so I'm looking for input on this.
The text was updated successfully, but these errors were encountered: