Hmm.  Well, your rescue clause is looking specifically for exceptions
of type Timeout::Error or of a subclass of that class.  Since
Errno::ETIMEDOUT isn't descended from Timeout::Error, the rescue
clause never gets called.  If you want a generic rescue to catch
everything, try 'rescue Exception => e'

Bill

On Tue, 5 Oct 2004 14:04:53 +0900, Mark Probert <probertm / nospam-acm.org> wrote:
> Hi ..
> 
> Bill Atkins <batkins57 / gmail.com> wrote:
> >
> > Add a rescue clause for the exception you're getting: ...
> > Is that what you're looking for?
> >
> 
> Not quite.
> 
> I guess the real qustion is why Timeout::Error doesn't trap
> Errno::ETIMEDOUT.  The socket times out before the timeout() and raises a
> different timeout error.  Perhaps it would be better if, when a block is
> wrapped in a Timeout::timeout, that all subservient timeouts should be
> caught by the  single rescue.
> 
> It does raise the question why the generic rescue isn't triggered.
> 
> 
> > Bill Atkins
> >
> > On Tue, 5 Oct 2004 06:09:53 +0900, Mark Probert
> > <probertm / nospam-acm.org> wrote:
> >>
> >> Hi ..
> >>
> >> I have the following code:
> >>
> >>   def alive?(host,port)
> >>     ok = false
> >>     begin
> >>         Timeout::timeout(30) {
> >>             begin
> >>                 t = TCPSocket.new(host,port) # <--- line 150
> >>                 t.close
> >>                 ok = true
> >>             rescue Exception => e  # why not caught here?
> >>                 @exception = e
> >>             end
> >>         }
> >>      rescue Timeout::Error => e  # or here?
> >>          @exception = e
> >>      end
> >>      return ok
> >>   end
> >>
> >> In a known failure case, TCPSocket will fail (no host connectivity).
> >>
> >> However,
> >>
> >> 13:56 (hobbes)$ ruby foo.rb
> >> Exception `Errno::ETIMEDOUT' at ./bsn.rb:150 - Connection timed out -
> >>
> >> 13:57 (hobbes)$ ruby -v
> >> ruby 1.8.1 (2003-12-25) [i386-cygwin]
> >>
> >> What is the right way of handling this exception?
> >>
> >> --
> >> -mark.  (probertm @ acm dot org)
> >>
> >>
> >
> >
> >
> 
> 
> 
> 
> --
> -mark.  (probertm @ acm dot org)
> 
>