ruby-changes:50770
From: normal <ko1@a...>
Date: Wed, 28 Mar 2018 17:05:55 +0900 (JST)
Subject: [ruby-changes:50770] normal:r62953 (trunk): webrick: favor .write over << method
normal 2018-03-28 17:05:46 +0900 (Wed, 28 Mar 2018) New Revision: 62953 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=62953 Log: webrick: favor .write over << method This will make the next change to use IO.copy_stream easier-to-read. When we can drop Ruby 2.4 support in a few years, this will allow us to use writev(2) with multiple arguments for headers and chunked responses. * lib/webrick/cgi.rb (write): new wrapper method lib/webrick/httpresponse.rb: (send_header): use socket.write (send_body_io): ditto (send_body_string): ditto (send_body_proc): ditto (_write_data): ditto (ChunkedWrapper#write): ditto (_send_file): ditto Modified files: trunk/lib/webrick/cgi.rb trunk/lib/webrick/httpresponse.rb Index: lib/webrick/httpresponse.rb =================================================================== --- lib/webrick/httpresponse.rb (revision 62952) +++ lib/webrick/httpresponse.rb (revision 62953) @@ -293,7 +293,7 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/httpresponse.rb#L293 data << "Set-Cookie: " << cookie.to_s << CRLF } data << CRLF - _write_data(socket, data) + socket.write(data) end end @@ -401,14 +401,14 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/httpresponse.rb#L401 @body.readpartial(@buffer_size, buf) size = buf.bytesize data = "#{size.to_s(16)}#{CRLF}#{buf}#{CRLF}" - _write_data(socket, data) + socket.write(data) data.clear @sent_size += size rescue EOFError break end while true buf.clear - _write_data(socket, "0#{CRLF}#{CRLF}") + socket.write("0#{CRLF}#{CRLF}") else size = @header['content-length'].to_i _send_file(socket, @body, 0, size) @@ -429,13 +429,13 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/httpresponse.rb#L429 size = buf.bytesize data = "#{size.to_s(16)}#{CRLF}#{buf}#{CRLF}" buf.clear - _write_data(socket, data) + socket.write(data) @sent_size += size end - _write_data(socket, "0#{CRLF}#{CRLF}") + socket.write("0#{CRLF}#{CRLF}") else if @body && @body.bytesize > 0 - _write_data(socket, @body) + socket.write(@body) @sent_size = @body.bytesize end end @@ -446,7 +446,7 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/httpresponse.rb#L446 # do nothing elsif chunked? @body.call(ChunkedWrapper.new(socket, self)) - _write_data(socket, "0#{CRLF}#{CRLF}") + socket.write("0#{CRLF}#{CRLF}") else size = @header['content-length'].to_i @body.call(socket) @@ -466,7 +466,7 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/httpresponse.rb#L466 @resp.instance_eval { size = buf.bytesize data = "#{size.to_s(16)}#{CRLF}#{buf}#{CRLF}" - _write_data(socket, data) + socket.write(data) data.clear @sent_size += size } @@ -483,18 +483,19 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/httpresponse.rb#L483 if size == 0 while buf = input.read(@buffer_size) - _write_data(output, buf) + output.write(buf) end else while size > 0 sz = @buffer_size < size ? @buffer_size : size buf = input.read(sz) - _write_data(output, buf) + output.write(buf) size -= buf.bytesize end end end + # preserved for compatibility with some 3rd-party handlers def _write_data(socket, data) socket << data end Index: lib/webrick/cgi.rb =================================================================== --- lib/webrick/cgi.rb (revision 62952) +++ lib/webrick/cgi.rb (revision 62953) @@ -265,6 +265,10 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/cgi.rb#L265 @out_port << data end + def write(data) + @out_port.write(data) + end + def cert return nil unless defined?(OpenSSL) if pem = @env["SSL_SERVER_CERT"] -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/