[前][次][番号順一覧][スレッド一覧]

ruby-changes:57991

From: Jeremy <ko1@a...>
Date: Fri, 27 Sep 2019 23:53:01 +0900 (JST)
Subject: [ruby-changes:57991] 2b6a9f3a1f (master): Ignore Errno::EPIPE when sending requests in net/http

https://git.ruby-lang.org/ruby.git/commit/?id=2b6a9f3a1f

From 2b6a9f3a1ffcdb00bf89798979d475c6d189d419 Mon Sep 17 00:00:00 2001
From: Jeremy Evans <code@j...>
Date: Thu, 20 Jun 2019 12:59:29 -0700
Subject: Ignore Errno::EPIPE when sending requests in net/http

An EPIPE when sending the request should be ignored.  Even if you
cannot write more data, you may still be able to read the server's
response.

Fixes [Bug #14466]

diff --git a/lib/net/http.rb b/lib/net/http.rb
index bc181c0..663b901 100644
--- a/lib/net/http.rb
+++ b/lib/net/http.rb
@@ -1504,7 +1504,13 @@ module Net   #:nodoc: https://github.com/ruby/ruby/blob/trunk/lib/net/http.rb#L1504
       begin
         begin_transport req
         res = catch(:response) {
-          req.exec @socket, @curr_http_version, edit_path(req.path)
+          begin
+            req.exec @socket, @curr_http_version, edit_path(req.path)
+          rescue Errno::EPIPE
+            # Failure when writing full request, but we can probably
+            # still read the received response.
+          end
+
           begin
             res = HTTPResponse.read_new(@socket)
             res.decode_content = req.decode_content
diff --git a/test/net/http/test_http.rb b/test/net/http/test_http.rb
index b5c4463..f648ce5 100644
--- a/test/net/http/test_http.rb
+++ b/test/net/http/test_http.rb
@@ -890,6 +890,17 @@ class TestNetHTTP_v1_2 < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/net/http/test_http.rb#L890
     Net::HTTP.version_1_2
     super
   end
+
+  def test_send_large_POST_request
+    start {|http|
+      data = ' '*6000000
+      res = http.send_request('POST', '/', data, 'content-type' => 'application/x-www-form-urlencoded')
+      assert_kind_of Net::HTTPResponse, res
+      assert_kind_of String, res.body
+      assert_equal data.size, res.body.size
+      assert_equal data, res.body
+    }
+  end
 end
 
 class TestNetHTTP_v1_2_chunked < Test::Unit::TestCase
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]