From: "Mauricio Fernández" Date: 2003-02-07T21:09:03+09:00 Subject: Assessment on resource leakage Below is the result of a 10 minutes hack to create a simple HTTP-connect tunnel. I'm not closing sockets since I assume that at some point one end will close its connection and the thread will die with some exception such as Errno::EPIPE, Errno::EHOSTUNREACH or EOFError, so that the sockets are GC'ed (and closed) some time in the future. Is this assumption correct? require 'socket' port = (ARGV[0] || 6666).to_i server = TCPServer.new('localhost', port) puts "Binding to #{port}" while ( session = server.accept ) Thread.new(session) do |s| line = s.readline("\r\n") break unless line =~ /CONNECT\s+(.+):([0-9]+)\s+HTTP\/1.(?:0|1).*/ _host, _port = $1, $2 while line != "\r\n" line = s.readline("\r\n") end out = nil begin out = TCPSocket.new( _host, _port.to_i ) rescue s.print "HTTP/1.0 500 Connection could not be established\r\n\r\n" break end s.print "HTTP/1.0 200 Connection established\r\n\r\n" loop do ready = select [s, out] ready = ready[0] ready.each do |x| case x when s data = s.sysread(512) out.syswrite data when out data = out.sysread(512) s.syswrite data end end end end end -- _ _ | |__ __ _| |_ ___ _ __ ___ __ _ _ __ | '_ \ / _` | __/ __| '_ ` _ \ / _` | '_ \ | |_) | (_| | |_\__ \ | | | | | (_| | | | | |_.__/ \__,_|\__|___/_| |_| |_|\__,_|_| |_| Running Debian GNU/Linux Sid (unstable) batsman dot geo at yahoo dot com If loving linux is wrong, I dont wanna be right. -- Topic for #LinuxGER