Skip to content

Instantly share code, notes, and snippets.

@jballanc
Created July 29, 2010 08:10
Show Gist options
  • Save jballanc/497588 to your computer and use it in GitHub Desktop.
Save jballanc/497588 to your computer and use it in GitHub Desktop.
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