diff options
author | wyhaines <wyhaines@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-07 19:00:48 +0000 |
---|---|---|
committer | wyhaines <wyhaines@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-07 19:00:48 +0000 |
commit | 70271340af90bdfedd52854b45704cb488946d92 (patch) | |
tree | bfbacc2fb9c4dfa20cc36cdb83cbdaf5e21db217 | |
parent | 1e86a6b9ca71dbf12cab2795410a0ca3f0cd5b3a (diff) |
lib/net/http.rb: Backport #1284 [ruby-core:22874]; Change Net:HTTP to use a block size of 16k instead of 1k when streaming or chunking POST bodies.
test/net/http/test_post_io.rb: Backport #1284 [ruby-core:22874]; A test to go with the above change.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@28198 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib/net/http.rb | 6 | ||||
-rw-r--r-- | test/net/http/test_post_io.rb | 32 | ||||
-rw-r--r-- | version.h | 8 |
4 files changed, 45 insertions, 6 deletions
@@ -1,3 +1,8 @@ +Tue Jun 9 3:20:00 2010 Kirk Haines <khaines@ruby-lang.org> + + * lib/net/http.rb: Backport #1284 [ruby-core:22874]; Change Net:HTTP to use a block size of 16k instead of 1k when streaming or chunking POST bodies. + * test/net/http/test_post_io.rb: Backport #1284 [ruby-core:22874]; A test to go with the above change. + Fri Jun 4 5:57:00 2010 Kirk Haines <khaines@ruby-lang.org> * util.c: Backport #2392 [ruby-core:26868]; backport of r23353 which suppresses a strict-aliasing warning in gcc-4.4.x -O2. diff --git a/lib/net/http.rb b/lib/net/http.rb index 7dd1f24d4c..0c8c3ec319 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb @@ -1463,6 +1463,8 @@ module Net #:nodoc: include HTTPHeader + BUFSIZE = 16*1024 + def initialize(m, reqbody, resbody, path, initheader = nil) @method = m @request_has_body = reqbody @@ -1548,12 +1550,12 @@ module Net #:nodoc: supply_default_content_type write_header sock, ver, path if chunked? - while s = f.read(1024) + while s = f.read(BUFSIZE) sock.write(sprintf("%x\r\n", s.length) << s << "\r\n") end sock.write "0\r\n\r\n" else - while s = f.read(1024) + while s = f.read(BUFSIZE) sock.write s end end diff --git a/test/net/http/test_post_io.rb b/test/net/http/test_post_io.rb new file mode 100644 index 0000000000..c4093f9347 --- /dev/null +++ b/test/net/http/test_post_io.rb @@ -0,0 +1,32 @@ +require 'test/unit' +require 'net/http' +require 'stringio' + +class HTTPPostIOTest < Test::Unit::TestCase + def test_post_io_chunk_size + t = nil + TCPServer.open("127.0.0.1", 0) {|serv| + _, port, _, _ = serv.addr + t = Thread.new { + begin + req = Net::HTTP::Post.new("/test.cgi") + req['Transfer-Encoding'] = 'chunked' + req.body_stream = StringIO.new("\0" * (16 * 1024 + 1)) + http = Net::HTTP.new("127.0.0.1", port) + res = http.start { |http| http.request(req) } + rescue EOFError, Errno::EPIPE + end + } + sock = serv.accept + begin + assert_match(/chunked/, sock.gets("\r\n\r\n")) + chunk_header = sock.gets.chomp + assert_equal(16 * 1024, chunk_header.to_i(16)) + ensure + sock.close + end + } + ensure + t.join if t + end +end @@ -1,15 +1,15 @@ #define RUBY_VERSION "1.8.6" -#define RUBY_RELEASE_DATE "2010-06-04" +#define RUBY_RELEASE_DATE "2010-06-08" #define RUBY_VERSION_CODE 186 -#define RUBY_RELEASE_CODE 20100604 -#define RUBY_PATCHLEVEL 404 +#define RUBY_RELEASE_CODE 20100608 +#define RUBY_PATCHLEVEL 405 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 8 #define RUBY_VERSION_TEENY 6 #define RUBY_RELEASE_YEAR 2010 #define RUBY_RELEASE_MONTH 6 -#define RUBY_RELEASE_DAY 4 +#define RUBY_RELEASE_DAY 8 #ifdef RUBY_EXTERN RUBY_EXTERN const char ruby_version[]; |