From: Eric Hodel Date: 2012-02-26T07:15:59+09:00 Subject: [ruby-core:42939] [ruby-trunk - Bug #5765] [PATCH] modernize Timeout usage in net/{http,pop,smtp,telnet} Issue #5765 has been updated by Eric Hodel. I like this patch. This patch will collide with #6001, though, since I introduce Net::HTTP::OpenTimeout as a subclass of Timeout::Error. Should we add Net::OpenTimeout instead of Net::HTTP::OpenTimeout? See also #6088 where I introduce Net::ReadTimeout. The division between Net::ReadTimeout and Net::OpenTimeout will allow users to distinguish which operation timed out. For a read timeout they may wish to retry the operation. ---------------------------------------- Bug #5765: [PATCH] modernize Timeout usage in net/{http,pop,smtp,telnet} https://bugs.ruby-lang.org/issues/5765 Author: Eric Wong Status: Open Priority: Low Assignee: Category: lib Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2011-12-14 trunk 34045) [x86_64-linux] Object#timeout is deprecated, so use Timeout.timeout instead Additionally, rely on raising Timeout::Error instead of temporary Class object. Using a temporary Class object only benefits nested timeouts, but the code paths in net/* do not nest timeouts. Unfortunately, any performance benefit of avoiding temporary Class objects is nullified here because Errno::EAGAIN is extended with IO::WaitReadable or IO::WaitWritable: https://bugs.ruby-lang.org/issues/5138 A better version of this patch would use timeouts via select() when handling DNS lookup and non-blocking connect(). That requires more effort to deal with hostnames that resolve to multiple addresses, so we'll revisit that later. This change is also pullable: git pull git://bogomips.org/ruby modern-timeout -- http://bugs.ruby-lang.org/