ruby-changes:65999
From: mohamed <ko1@a...>
Date: Wed, 28 Apr 2021 10:53:55 +0900 (JST)
Subject: [ruby-changes:65999] ff931d0336 (master): [ruby/net-smtp] Replace Timeout.timeout with socket timeout
https://git.ruby-lang.org/ruby.git/commit/?id=ff931d0336 From ff931d03366e7d07d4974d4bff51128ddbc5e1d6 Mon Sep 17 00:00:00 2001 From: mohamed <mohamed.m.m.hafez@g...> Date: Mon, 15 Feb 2021 09:36:50 -0800 Subject: [ruby/net-smtp] Replace Timeout.timeout with socket timeout Timeout.timeout is inefficient since it spins up a new thread for each invocation, use Socket.tcp's connect_timeout option instead https://github.com/ruby/net-smtp/commit/6ae4a59f05 --- lib/net/smtp.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/net/smtp.rb b/lib/net/smtp.rb index 6ce2059..9dd1d26 100644 --- a/lib/net/smtp.rb +++ b/lib/net/smtp.rb @@ -588,7 +588,12 @@ module Net https://github.com/ruby/ruby/blob/trunk/lib/net/smtp.rb#L588 private def tcp_socket(address, port) - TCPSocket.open address, port + begin + Socket.tcp address, port, nil, nil, connect_timeout: @open_timeout + rescue Errno::ETIMEDOUT #raise Net:OpenTimeout instead for compatibility with previous versions + raise Net::OpenTimeout, "Timeout to open TCP connection to "\ + "#{address}:#{port} (exceeds #{@open_timeout} seconds)" + end end def do_start(helo_domain, user, secret, authtype) @@ -597,9 +602,7 @@ module Net https://github.com/ruby/ruby/blob/trunk/lib/net/smtp.rb#L602 check_auth_method(authtype || DEFAULT_AUTH_TYPE) check_auth_args user, secret end - s = Timeout.timeout(@open_timeout, Net::OpenTimeout) do - tcp_socket(@address, @port) - end + s = tcp_socket(@address, @port) logging "Connection opened: #{@address}:#{@port}" @socket = new_internet_message_io(tls? ? tlsconnect(s, @ssl_context_tls) : s) check_response critical { recv_response() } -- cgit v1.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/