When I commented that it was not working on the other thread, I had used Live HTTP Headers to see that it was responding with "Content-length: 0".<p>The following seems to replicate everything you described.<p><pre><code>  require 'gserver'

  class PuzzlerServer &#60; GServer
    def initialize(port=10001, *args)
      super(port, *args)
    end
    def serve(io)
      data = io.readpartial(4096)
      io.puts "HTTP1/x 200 OK"
      io.puts "Content-Length: #{(data =~ /good/i) ? data.length : 0}"
      io.puts "Content-Type: text/html"
      io.puts 
      io.puts(data)
    end
  end

  server = PuzzlerServer.new
  server.start
  server.join</code></pre>