require 'socket' host, port = nil, nil begin host = ARGV.shift || raise port = ARGV.shift || raise rescue $stderr.puts "#$0 host port" end socket = TCPSocket.new(host, port) begin callcc do |done| while true do begin ready = select([socket, $stdin], nil, nil, nil) rescue done end next if not ready ready[0].each do |s| done if s.eof if s == $stdin then socket.send s.gets, 0 else puts s.gets end end end socket.flush end ensure socket.close end