Created
July 29, 2010 08:10
-
-
Save jballanc/497588 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/bin/control_tower b/bin/control_tower | |
index b9f4968..e911b0b 100755 | |
--- a/bin/control_tower | |
+++ b/bin/control_tower | |
@@ -8,21 +8,21 @@ require 'optparse' | |
# Some default values | |
@options = { | |
:rackup => './config.ru', | |
- :port => '8080', | |
+ :port => '3000', | |
:host => '0.0.0.0', | |
:concurrent => false | |
} | |
OptionParser.new do |opts| | |
- opts.on("-R", "--rackup [FILE]", "Rack-up Configuration File") do |rackup| | |
+ opts.on("-R", "--rackup FILE", "Rack-up Configuration File") do |rackup| | |
@options[:rackup] = rackup | |
end | |
- opts.on("-p", "--port [SERVER_PORT]", Integer, "Port on which to run the server") do |port| | |
+ opts.on("-p", "--port PORT", Integer, "Port on which to run the server (default: 3000)") do |port| | |
@options[:port] = port | |
end | |
- opts.on("-h", "--host [HOSTNAME]", "Hostname for the server") do |host| | |
+ opts.on("-a", "--address HOST", "Address to bind server to (default: 0.0.0.0)") do |host| | |
@options[:host] = host | |
end | |
diff --git a/lib/control_tower/rack_socket.rb b/lib/control_tower/rack_socket.rb | |
index 51122cc..df1ee46 100644 | |
--- a/lib/control_tower/rack_socket.rb | |
+++ b/lib/control_tower/rack_socket.rb | |
@@ -39,6 +39,7 @@ module ControlTower | |
'rack.multithread' => @multithread, | |
'rack.run_once' => false, | |
'rack.version' => VERSION } | |
+ resp = nil | |
begin | |
request_data = parse!(connection, env) | |
if request_data | |
@@ -87,8 +88,13 @@ module ControlTower | |
rescue EOFError, Errno::ECONNRESET, Errno::EPIPE, Errno::EINVAL | |
$stderr.puts "Error: Connection terminated!" | |
rescue Object => e | |
- $stderr.puts "Error: Problem transmitting data -- #{e.inspect}" | |
- $stderr.puts e.backtrace.join("\n") | |
+ if resp.nil? && !connection.closed? | |
+ connection.write "HTTP/1.1 400\r\n\r\n" | |
+ else | |
+ # We have a response, but there was trouble sending it: | |
+ $stderr.puts "Error: Problem transmitting data -- #{e.inspect}" | |
+ $stderr.puts e.backtrace.join("\n") | |
+ end | |
ensure | |
# We should clean up after our tempfile, if we used one. | |
input = env['rack.input'] | |
diff --git a/lib/rack/handler/control_tower.rb b/lib/rack/handler/control_tower.rb | |
index f9986ae..28854e2 100644 | |
--- a/lib/rack/handler/control_tower.rb | |
+++ b/lib/rack/handler/control_tower.rb | |
@@ -7,6 +7,7 @@ module Rack | |
module Handler | |
class ControlTower | |
def self.run(app, options={}) | |
+ app = Rack::Chunked.new(Rack::ContentLength.new(app)) | |
server = ::ControlTower::Server.new(app, options) | |
yield server if block_given? | |
server.start |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment