[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]