Sha256: 707ee6a69303e054e9b4bcbfb346335471ec7fcd1a871442cbe5509720e4fff8
Contents?: true
Size: 1.05 KB
Versions: 3
Compression:
Stored size: 1.05 KB
Contents
require 'socket' module Fulmar module Infrastructure module Service class TunnelService attr_reader :host, :remote_port, :local_port def initialize(host, port) @host = host @remote_port = port @local_port = 0 @tunnel_pid = 0 end def open @local_port = free_port @tunnel_pid = Process.spawn "ssh #{@host} -L #{@local_port}:localhost:#{@remote_port} -N" sleep 1 end def close Process.kill 'TERM', @tunnel_pid if @tunnel_pid > 0 @local_port = 0 @tunnel_pid = 0 end def open? @tunnel_pid > 0 end def free_port port = 60000 begin 1000.times do socket = TCPSocket.new('localhost', port) socket.close port += 1 end rescue Errno::ECONNREFUSED return port end fail 'Cannot find an open local port' 0 end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems