From: Pat Maddox Date: 2005-04-02T20:05:15+09:00 Subject: Handling Timeout::Error from TCPSocket I'm writing a little method that just tries to open a tcp socket connection, then closes it off. I'm using timeout to limit the amount of time it tries to connect (is there a better way?). If it times out, I just want to say that the connect failed. Despite catching the Timeout::Error (I think, anyway), I always get the Exception output. First, here's the method: def execute status = timeout(@timeoutval) { socket = TCPSocket.new(@host, @port) rescue false socket.close if socket return socket != false } rescue Timeout::Error return false end And now the output from my unit test: Started /usr/local/lib/ruby/1.8/timeout.rb:42:in `new': execution expired (Timeout::Error) from ./PortHostTest.rb:16:in `execute' from ./PortHostTest.rb:15:in `timeout' from /usr/local/lib/ruby/1.8/timeout.rb:55:in `timeout' from ./PortHostTest.rb:15:in `execute' from ./HostTest.rb:10:in `runTest' from ../tests/test_HostTest.rb:14:in `test_simple' from /usr/local/lib/ruby/1.8/test/unit/testcase.rb:70:in `__send__' from /usr/local/lib/ruby/1.8/test/unit/testcase.rb:70:in `run' ... 10 levels... from /usr/local/lib/ruby/1.8/test/unit/autorunner.rb:194:in `run' from /usr/local/lib/ruby/1.8/test/unit/autorunner.rb:14:in `run' from /usr/local/lib/ruby/1.8/test/unit.rb:285 from /usr/local/lib/ruby/1.8/test/unit.rb:283