我正在使用Net::SSH连接到另一台服务器。它工作正常,但我希望能够处理无法连接的情况。该方法的文档没有提到异常,据我所知,它没有引发任何异常。在以下示例中,传递不存在且没有键的主机和用户不会引发异常。
我可以检查它是否失败的唯一方法是查看@session,它将为零,但这并不能告诉我它失败的原因。
begin
@session = Net::SSH.start('no-host', 'no-user', keys: [])
rescue SocketError => e
connection_failed = true
logger.error "SOCKET ERROR: "+e.message
rescue Net::SSH::AuthenticationFailed
connection_failed = true
logger.error "AUTH ERROR: "+e.message
rescue Exception => e
logger.error "EXCEPTION: "+e.message
end
[更新] 在 irb 中运行以下命令会引发 SocketError:
> require 'net/ssh'
> Net::SSH.start('no-host', 'no-user', keys: [])
= SocketError: getaddrinfo: nodename nor servname provided, or not known
为什么这不会在我的应用程序中引发异常?