Index: lib/webrick/httprequest.rb
===================================================================
RCS file: /var/cvs/src/ruby/lib/webrick/httprequest.rb,v
retrieving revision 1.5.2.2
diff -u -p -F^[^A-Za-z0-9_+-]*\(class\|module\|def\)[^A-Za-z0-9_+-] -r1.5.2.2 httprequest.rb
--- lib/webrick/httprequest.rb	22 Oct 2004 01:38:09 -0000	1.5.2.2
+++ lib/webrick/httprequest.rb	25 Sep 2005 07:01:24 -0000
@@ -306,7 +306,12 @@     def read_chunk_size(socket)
     def read_chunked(socket, block)
       chunk_size, = read_chunk_size(socket)
       while chunk_size > 0
-        data = read_data(socket, chunk_size) # read chunk-data
+        data = ""
+        while data.size < chunk_size
+          tmp = read_data(socket, chunk_size-data.size) # read chunk-data
+          break unless tmp
+          data << tmp
+        end
         if data.nil? || data.size != chunk_size
           raise BadRequest, "bad chunk data size."
         end
Index: lib/webrick/server.rb
===================================================================
RCS file: /var/cvs/src/ruby/lib/webrick/server.rb,v
retrieving revision 1.5.2.3
diff -u -p -F^[^A-Za-z0-9_+-]*\(class\|module\|def\)[^A-Za-z0-9_+-] -r1.5.2.3 server.rb
--- lib/webrick/server.rb	16 Dec 2004 09:45:59 -0000	1.5.2.3
+++ lib/webrick/server.rb	25 Sep 2005 07:01:24 -0000
@@ -90,6 +90,7 @@     def start(&block)
                 @tokens.pop          # blocks while no token is there.
                 sock = svr.accept
                 sock.sync = true
+                Utils::set_non_blocking(sock)
                 Utils::set_close_on_exec(sock)
                 th = start_thread(sock, &block)
                 th[:WEBrickThread] = true
Index: lib/webrick/utils.rb
===================================================================
RCS file: /var/cvs/src/ruby/lib/webrick/utils.rb,v
retrieving revision 1.3
diff -u -p -F^[^A-Za-z0-9_+-]*\(class\|module\|def\)[^A-Za-z0-9_+-] -r1.3 utils.rb
--- lib/webrick/utils.rb	28 Sep 2003 17:50:52 -0000	1.3
+++ lib/webrick/utils.rb	25 Sep 2005 07:01:24 -0000
@@ -18,6 +18,14 @@ end
 
 module WEBrick
   module Utils
+    def set_non_blocking(io)
+      flag = File::NONBLOCK
+      if defined?(Fcntl::F_GETFL)
+        flag |= io.fcntl(Fcntl::F_GETFL)
+      end
+      io.fcntl(Fcntl::F_SETFL, flag)
+    end
+    module_function :set_non_blocking
 
     def set_close_on_exec(io)
       if defined?(Fcntl::FD_CLOEXEC)
