def open(host, port)
command_line = @command_line_template.gsub(/%(.)/) {
case $1
when 'h'
host
when 'p'
port.to_s
when '%'
'%'
else
raise ArgumentError, "unknown key: #{$1}"
end
}
begin
io = IO.popen(command_line, "r+")
if result = Net::SSH::Compat.io_select([io], nil, [io], 60)
if result.last.any?
raise "command failed"
end
else
raise "command timed out"
end
rescue => e
raise ConnectError, "#{e}: #{command_line}"
end
@command_line = command_line
class << io
def send(data, flag)
write_nonblock(data)
end
def recv(size)
read_nonblock(size)
end
end
io
end