From: Eric Hodel <drbrain@...7.net>
Date: 2012-02-28T14:17:34+09:00
Subject: [ruby-core:42995] [ruby-trunk - Bug #5765] [PATCH] modernize Timeout usage in net/{http,pop,smtp,telnet}


Issue #5765 has been updated by Eric Hodel.


Since the original patch was approved and Net::HTTP::OpenTimeout was approved in #6001, I applied a combined patch in r34843, replacing Net::HTTP::OpenTimeout.
----------------------------------------
Bug #5765: [PATCH] modernize Timeout usage in net/{http,pop,smtp,telnet}
https://bugs.ruby-lang.org/issues/5765

Author: Eric Wong
Status: Closed
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/