Sylvain Viart wrote: > In the lib, we got a bloc with > > 484 rescue Exception => e > > Which I would expect to catch anything. but it missed > Errno::EHOSTUNREACH. Probably I should not try to answer this as I don't use Net::SSH::Multi, but I've installed the gem now: Successfully installed net-ssh-2.0.4 Successfully installed net-ssh-gateway-1.0.0 Successfully installed net-ssh-multi-1.0.0 I see that rescue only covers the preceding line: begin server.new_session rescue Exception => e That is, it will catch an exception raised by server.new_session only. > Strangely, if I add another rescue statement in the lib: > > /var/lib/gems/1.8/gems/net-ssh-multi-1.0.0/lib/net/ssh/./multi/session.rb > 506 rescue > 507 puts "caught:#{$!}" > 508 end > > it works?? Why? Possibly it's rescuing an exception which is occurring between lines 469 and 480. But since you didn't show the actual backtrace, then this is pure guesswork. One option is: puts "caught:#{$!}\n#{$!.backtrace.join("\n")}" > Why the normally more open "rescue Exception => e" didn't do its job? I don't know. But when making a extraordinary claim ("rescue is not doing its job") then you need to provide the evidence to back it up. Now, I can replicate something like your problem: pointing to a non-existent host on my LAN gives an Errno::EHOSTUNREACH. require 'rubygems' require 'net/ssh/multi' Net::SSH::Multi.start(:on_error => :warn) do |session| # define the servers we want to use session.use 'root@localhost' session.use 'root / 10.1.1.10' # non-existent host on local LAN # execute commands on all servers begin session.exec( "hostname" ) rescue Exception => e puts "main:#{e}\n#{e.backtrace.join("\n")}" end # run the aggregated event loop session.loop end $ ruby test.rb error connecting to root@localhost: Net::SSH::AuthenticationFailed (root@localhost) main:No route to host - connect(2) /usr/local/lib/ruby/gems/1.8/gems/net-ssh-2.0.4/lib/net/ssh/transport/session.rb:65:in `initialize' /usr/local/lib/ruby/gems/1.8/gems/net-ssh-multi-1.0.0/lib/net/ssh/multi/session_actions.rb:37:in `join' /usr/local/lib/ruby/gems/1.8/gems/net-ssh-multi-1.0.0/lib/net/ssh/multi/session_actions.rb:37:in `sessions' /usr/local/lib/ruby/gems/1.8/gems/net-ssh-multi-1.0.0/lib/net/ssh/multi/session_actions.rb:37:in `each' /usr/local/lib/ruby/gems/1.8/gems/net-ssh-multi-1.0.0/lib/net/ssh/multi/session_actions.rb:37:in `sessions' /usr/local/lib/ruby/gems/1.8/gems/net-ssh-multi-1.0.0/lib/net/ssh/multi/session_actions.rb:81:in `open_channel' /usr/local/lib/ruby/gems/1.8/gems/net-ssh-multi-1.0.0/lib/net/ssh/multi/session_actions.rb:120:in `exec' test.rb:10 /usr/local/lib/ruby/gems/1.8/gems/net-ssh-multi-1.0.0/lib/net/ssh/multi.rb:62:in `start' test.rb:3 I get an exception like you do. However I see no evidence at all that lib/net/ssh/multi/session.rb is involved. This is ruby 1.8.6p114. I don't have any specific reason why 1.8.5 wouldn't work, but I consider 1.8.6p114 to be the most "stable" Ruby available (certainly more stable than later releases in the 1.8.6 family :-) and it may well be that Net::SSH::Multi hasn't been well tested with 1.8.5. So it could be worth a try. -- Posted via http://www.ruby-forum.com/.