#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