#TCP Relay   localhost:80 -> www.ruby-lang.org:80
require 'socket'
def pipeThread(s,r)
  Thread.start(s,r){ |s,r| 
    loop do
      d=s.recv(1000000)
      Thread.exit if !d || d.size==0
      r.write d
    end
  }
end
gs=TCPServer.new(80)
Thread.start { loop { sleep 0.1 } } # for windows
loop do
  Thread.start(gs.accept) { |s|
    begin
      cs =TCPSocket.new("www.ruby-lang.org",80)
      thg = [pipeThread(s,cs),pipeThread(cs,s)]
      sleep 0.1 while thg[0].alive? && thg[1].alive?
    ensure
      thg.each {|th| th.kill}
      s.close
      cs.close
    end
  }
end