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

ruby-changes:65985

From: mohamed <ko1@a...>
Date: Tue, 27 Apr 2021 21:23:28 +0900 (JST)
Subject: [ruby-changes:65985] a86c6cb34d (master): [ruby/net-ftp] Replace Timeout.timeout with socket timeout

https://git.ruby-lang.org/ruby.git/commit/?id=a86c6cb34d

From a86c6cb34df0c44973efe6578ba1cd9150af22cf Mon Sep 17 00:00:00 2001
From: mohamed <mohamed.m.m.hafez@g...>
Date: Mon, 15 Feb 2021 10:25:59 -0800
Subject: [ruby/net-ftp] 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
when we aren't using SOCKS (we can't replace Timeout.timeout
for SOCKS yet since SOCKSSocket doesn't have a connect_timeout
option).

https://github.com/ruby/net-ftp/commit/d65910132f
---
 lib/net/ftp.rb | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb
index 88e8655..a2607a9 100644
--- a/lib/net/ftp.rb
+++ b/lib/net/ftp.rb
@@ -330,14 +330,19 @@ module Net https://github.com/ruby/ruby/blob/trunk/lib/net/ftp.rb#L330
     # SOCKS_SERVER, then a SOCKSSocket is returned, else a Socket is
     # returned.
     def open_socket(host, port) # :nodoc:
-      return Timeout.timeout(@open_timeout, OpenTimeout) {
-        if defined? SOCKSSocket and ENV["SOCKS_SERVER"]
-          @passive = true
+      if defined? SOCKSSocket and ENV["SOCKS_SERVER"]
+        @passive = true
+        Timeout.timeout(@open_timeout, OpenTimeout) do
           SOCKSSocket.open(host, port)
-        else
-          Socket.tcp(host, port)
         end
-      }
+      else
+        begin
+          Socket.tcp host, 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 "\
+          "#{host}:#{port} (exceeds #{@open_timeout} seconds)"
+        end
+      end
     end
     private :open_socket
 
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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