summaryrefslogtreecommitdiff
path: root/lib/net/http.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/net/http.rb')
-rw-r--r--lib/net/http.rb48
1 files changed, 25 insertions, 23 deletions
diff --git a/lib/net/http.rb b/lib/net/http.rb
index b6e5de0a54..690690ae28 100644
--- a/lib/net/http.rb
+++ b/lib/net/http.rb
@@ -1343,33 +1343,35 @@ module Net #:nodoc:
def transport_request(req)
count = 0
- begin_transport req
- res = catch(:response) {
- req.exec @socket, @curr_http_version, edit_path(req.path)
- begin
- res = HTTPResponse.read_new(@socket)
- end while res.kind_of?(HTTPContinue)
- res.reading_body(@socket, req.response_body_permitted?) {
- yield res if block_given?
+ begin
+ begin_transport req
+ res = catch(:response) {
+ req.exec @socket, @curr_http_version, edit_path(req.path)
+ begin
+ res = HTTPResponse.read_new(@socket)
+ end while res.kind_of?(HTTPContinue)
+ res.reading_body(@socket, req.response_body_permitted?) {
+ yield res if block_given?
+ }
+ res
}
+ end_transport req, res
res
- }
- end_transport req, res
- res
- rescue EOFError, Errno::ECONNRESET => exception
- if count == 0 && IDEMPOTENT_METHODS_.include?(req.method)
- count += 1
+ rescue EOFError, Errno::ECONNRESET => exception
+ if count == 0 && IDEMPOTENT_METHODS_.include?(req.method)
+ count += 1
+ @socket.close if @socket and not @socket.closed?
+ D "Conn close because of error #{exception}, and retry"
+ retry
+ end
+ D "Conn close because of error #{exception}"
+ @socket.close if @socket and not @socket.closed?
+ raise
+ rescue => exception
+ D "Conn close because of error #{exception}"
@socket.close if @socket and not @socket.closed?
- D "Conn close because of error #{exception}, and retry"
- retry
+ raise exception
end
- D "Conn close because of error #{exception}"
- @socket.close if @socket and not @socket.closed?
- raise
- rescue => exception
- D "Conn close because of error #{exception}"
- @socket.close if @socket and not @socket.closed?
- raise exception
end
def begin_transport(req)