1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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]
This commit is contained in:
Jeremy Evans 2019-06-20 12:59:29 -07:00
parent 80d0b6f132
commit 2b6a9f3a1f
Notes: git 2019-09-27 23:44:04 +09:00
2 changed files with 18 additions and 1 deletions

View file

@ -1504,7 +1504,13 @@ module Net #:nodoc:
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

View file

@ -890,6 +890,17 @@ class TestNetHTTP_v1_2 < Test::Unit::TestCase
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