diff --git a/lib/restclient/request.rb b/lib/restclient/request.rb index f011c91..86a3c6b 100644 --- a/lib/restclient/request.rb +++ b/lib/restclient/request.rb @@ -557,7 +557,8 @@ module RestClient def transmit uri, req, payload, & block # We set this to true in the net/http block so that we can distinguish - # read_timeout from open_timeout. This isn't needed in Ruby >= 2.0. + # read_timeout from open_timeout. Now that we only support Ruby 2.0+, + # this is only needed for Timeout exceptions thrown outside of Net::HTTP. established_connection = false setup_credentials req @@ -641,18 +642,12 @@ module RestClient end rescue EOFError raise RestClient::ServerBrokeConnection + rescue Net::OpenTimeout => err + raise RestClient::Exceptions::OpenTimeout.new(nil, err) + rescue Net::ReadTimeout => err + raise RestClient::Exceptions::ReadTimeout.new(nil, err) rescue Timeout::Error, Errno::ETIMEDOUT => err - # Net::HTTP has OpenTimeout, ReadTimeout in Ruby >= 2.0 - if defined?(Net::OpenTimeout) - case err - when Net::OpenTimeout - raise RestClient::Exceptions::OpenTimeout.new(nil, err) - when Net::ReadTimeout - raise RestClient::Exceptions::ReadTimeout.new(nil, err) - end - end - - # compatibility for Ruby 1.9.3, handling for non-Net::HTTP timeouts + # handling for non-Net::HTTP timeouts if established_connection raise RestClient::Exceptions::ReadTimeout.new(nil, err) else