зеркало из https://github.com/github/ruby.git
* lib/net/protocol.rb: Add OpenTimeout subclass of Timeout::Error
* lib/net/pop.rb: Modernize Timeout usage. Patch by Eric Wong. Use Net::OpenTimeout instead of Timeout::Error. [Bug #5765] * lib/net/http.rb: ditto * lib/net/smtp.rb: ditto * lib/net/telnet.rb: ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34843 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
8a7da58c0f
Коммит
09f27873ed
18
ChangeLog
18
ChangeLog
|
@ -1,3 +1,21 @@
|
||||||
|
Tue Feb 28 14:15:29 2012 Eric Hodel <drbrain@segment7.net>
|
||||||
|
|
||||||
|
* lib/net/protocol.rb: Add OpenTimeout subclass of Timeout::Error
|
||||||
|
* lib/net/pop.rb: Modernize Timeout usage. Patch by Eric Wong.
|
||||||
|
Use Net::OpenTimeout instead of Timeout::Error. [Bug #5765]
|
||||||
|
* lib/net/http.rb: ditto
|
||||||
|
* lib/net/smtp.rb: ditto
|
||||||
|
* lib/net/telnet.rb: ditto
|
||||||
|
|
||||||
|
Tue Feb 28 14:06:36 2012 Eric Hodel <drbrain@segment7.net>
|
||||||
|
|
||||||
|
* lib/net/protocol.rb: Add OpenTimeout subclass of Timeout::Error
|
||||||
|
* lib/net/pop.rb: Modernize Timeout usage. Patch by Eric Wong.
|
||||||
|
Use Net::OpenTimeout instead of Timeout::Error. [Bug #5765]
|
||||||
|
* lib/net/http.rb: ditto
|
||||||
|
* lib/net/smtp.rb: ditto
|
||||||
|
* lib/net/telnet.rb: ditto
|
||||||
|
|
||||||
Tue Feb 28 13:51:12 2012 Eric Hodel <drbrain@segment7.net>
|
Tue Feb 28 13:51:12 2012 Eric Hodel <drbrain@segment7.net>
|
||||||
|
|
||||||
* lib/net/http.rb: Retry HTTP requests for additional network errors.
|
* lib/net/http.rb: Retry HTTP requests for additional network errors.
|
||||||
|
|
|
@ -360,9 +360,6 @@ module Net #:nodoc:
|
||||||
#
|
#
|
||||||
class HTTP < Protocol
|
class HTTP < Protocol
|
||||||
|
|
||||||
class OpenTimeout < Timeout::Error
|
|
||||||
end
|
|
||||||
|
|
||||||
# :stopdoc:
|
# :stopdoc:
|
||||||
Revision = %q$Revision$.split[1]
|
Revision = %q$Revision$.split[1]
|
||||||
HTTPVersion = '1.1'
|
HTTPVersion = '1.1'
|
||||||
|
@ -791,7 +788,7 @@ module Net #:nodoc:
|
||||||
|
|
||||||
def connect
|
def connect
|
||||||
D "opening connection to #{conn_address()}..."
|
D "opening connection to #{conn_address()}..."
|
||||||
s = timeout(@open_timeout, OpenTimeout) {
|
s = Timeout.timeout(@open_timeout, Net::OpenTimeout) {
|
||||||
TCPSocket.open(conn_address(), conn_port())
|
TCPSocket.open(conn_address(), conn_port())
|
||||||
}
|
}
|
||||||
D "opened"
|
D "opened"
|
||||||
|
@ -829,7 +826,7 @@ module Net #:nodoc:
|
||||||
end
|
end
|
||||||
# Server Name Indication (SNI) RFC 3546
|
# Server Name Indication (SNI) RFC 3546
|
||||||
s.hostname = @address if s.respond_to? :hostname=
|
s.hostname = @address if s.respond_to? :hostname=
|
||||||
timeout(@open_timeout, OpenTimeout) { s.connect }
|
Timeout.timeout(@open_timeout, Net::OpenTimeout) { s.connect }
|
||||||
if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
|
if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
|
||||||
s.post_connection_check(@address)
|
s.post_connection_check(@address)
|
||||||
end
|
end
|
||||||
|
@ -1363,7 +1360,7 @@ module Net #:nodoc:
|
||||||
rescue IOError, EOFError,
|
rescue IOError, EOFError,
|
||||||
Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE,
|
Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE,
|
||||||
OpenSSL::SSL::SSLError, Timeout::Error => exception
|
OpenSSL::SSL::SSLError, Timeout::Error => exception
|
||||||
raise if OpenTimeout === exception
|
raise if Net::OpenTimeout === exception
|
||||||
|
|
||||||
if count == 0 && IDEMPOTENT_METHODS_.include?(req.method)
|
if count == 0 && IDEMPOTENT_METHODS_.include?(req.method)
|
||||||
count += 1
|
count += 1
|
||||||
|
|
|
@ -542,7 +542,9 @@ module Net
|
||||||
|
|
||||||
# internal method for Net::POP3.start
|
# internal method for Net::POP3.start
|
||||||
def do_start(account, password) # :nodoc:
|
def do_start(account, password) # :nodoc:
|
||||||
s = timeout(@open_timeout) { TCPSocket.open(@address, port) }
|
s = Timeout.timeout(@open_timeout, Net::OpenTimeout) do
|
||||||
|
TCPSocket.open(@address, port)
|
||||||
|
end
|
||||||
if use_ssl?
|
if use_ssl?
|
||||||
raise 'openssl library not installed' unless defined?(OpenSSL)
|
raise 'openssl library not installed' unless defined?(OpenSSL)
|
||||||
context = OpenSSL::SSL::SSLContext.new
|
context = OpenSSL::SSL::SSLContext.new
|
||||||
|
|
|
@ -44,6 +44,7 @@ module Net # :nodoc:
|
||||||
class ProtoCommandError < ProtocolError; end
|
class ProtoCommandError < ProtocolError; end
|
||||||
class ProtoRetriableError < ProtocolError; end
|
class ProtoRetriableError < ProtocolError; end
|
||||||
ProtocRetryError = ProtoRetriableError
|
ProtocRetryError = ProtoRetriableError
|
||||||
|
class OpenTimeout < Timeout::Error; end
|
||||||
|
|
||||||
|
|
||||||
class BufferedIO #:nodoc: internal use only
|
class BufferedIO #:nodoc: internal use only
|
||||||
|
|
|
@ -546,7 +546,9 @@ module Net
|
||||||
check_auth_method(authtype || DEFAULT_AUTH_TYPE)
|
check_auth_method(authtype || DEFAULT_AUTH_TYPE)
|
||||||
check_auth_args user, secret
|
check_auth_args user, secret
|
||||||
end
|
end
|
||||||
s = timeout(@open_timeout) { tcp_socket(@address, @port) }
|
s = Timeout.timeout(@open_timeout, Net::OpenTimeout) do
|
||||||
|
tcp_socket(@address, @port)
|
||||||
|
end
|
||||||
logging "Connection opened: #{@address}:#{@port}"
|
logging "Connection opened: #{@address}:#{@port}"
|
||||||
@socket = new_internet_message_io(tls? ? tlsconnect(s) : s)
|
@socket = new_internet_message_io(tls? ? tlsconnect(s) : s)
|
||||||
check_response critical { recv_response() }
|
check_response critical { recv_response() }
|
||||||
|
|
|
@ -9,8 +9,7 @@
|
||||||
# For documentation, see Net::Telnet.
|
# For documentation, see Net::Telnet.
|
||||||
#
|
#
|
||||||
|
|
||||||
require "socket"
|
require "net/protocol"
|
||||||
require "timeout"
|
|
||||||
require "English"
|
require "English"
|
||||||
|
|
||||||
module Net
|
module Net
|
||||||
|
@ -347,12 +346,12 @@ module Net
|
||||||
if @options["Timeout"] == false
|
if @options["Timeout"] == false
|
||||||
@sock = TCPSocket.open(@options["Host"], @options["Port"])
|
@sock = TCPSocket.open(@options["Host"], @options["Port"])
|
||||||
else
|
else
|
||||||
timeout(@options["Timeout"]) do
|
Timeout.timeout(@options["Timeout"], Net::OpenTimeout) do
|
||||||
@sock = TCPSocket.open(@options["Host"], @options["Port"])
|
@sock = TCPSocket.open(@options["Host"], @options["Port"])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
rescue TimeoutError
|
rescue Net::OpenTimeout
|
||||||
raise TimeoutError, "timed out while opening a connection to the host"
|
raise Net::OpenTimeout, "timed out while opening a connection to the host"
|
||||||
rescue
|
rescue
|
||||||
@log.write($ERROR_INFO.to_s + "\n") if @options.has_key?("Output_log")
|
@log.write($ERROR_INFO.to_s + "\n") if @options.has_key?("Output_log")
|
||||||
@dumplog.log_dump('#', $ERROR_INFO.to_s + "\n") if @options.has_key?("Dump_log")
|
@dumplog.log_dump('#', $ERROR_INFO.to_s + "\n") if @options.has_key?("Dump_log")
|
||||||
|
@ -508,7 +507,7 @@ module Net
|
||||||
# into a regular expression. Used only if Match and
|
# into a regular expression. Used only if Match and
|
||||||
# Prompt are not specified.
|
# Prompt are not specified.
|
||||||
# Timeout:: the number of seconds to wait for data from the host
|
# Timeout:: the number of seconds to wait for data from the host
|
||||||
# before raising a TimeoutError. If set to false,
|
# before raising a Timeout::Error. If set to false,
|
||||||
# no timeout will occur. If not specified, the
|
# no timeout will occur. If not specified, the
|
||||||
# Timeout option value specified when this instance
|
# Timeout option value specified when this instance
|
||||||
# was created will be used, or, failing that, the
|
# was created will be used, or, failing that, the
|
||||||
|
|
|
@ -119,7 +119,7 @@ class TestNetHTTPS < Test::Unit::TestCase
|
||||||
conn.open_timeout = 0.01
|
conn.open_timeout = 0.01
|
||||||
|
|
||||||
th = Thread.new do
|
th = Thread.new do
|
||||||
assert_raise(Net::HTTP::OpenTimeout) {
|
assert_raise(Net::OpenTimeout) {
|
||||||
conn.get('/')
|
conn.get('/')
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
Загрузка…
Ссылка в новой задаче