summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwyhaines <wyhaines@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-06-07 19:00:48 +0000
committerwyhaines <wyhaines@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-06-07 19:00:48 +0000
commit70271340af90bdfedd52854b45704cb488946d92 (patch)
treebfbacc2fb9c4dfa20cc36cdb83cbdaf5e21db217
parent1e86a6b9ca71dbf12cab2795410a0ca3f0cd5b3a (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--ChangeLog5
-rw-r--r--lib/net/http.rb6
-rw-r--r--test/net/http/test_post_io.rb32
-rw-r--r--version.h8
4 files changed, 45 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index ba93fd9706..0b67d24005 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/version.h b/version.h
index d06e46f9e4..3592c6a41f 100644
--- a/version.h
+++ b/version.h
@@ -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[];