summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/net/ftp.rb4
-rw-r--r--test/net/ftp/test_ftp.rb24
2 files changed, 26 insertions, 2 deletions
diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb
index 7aac61afe8..1f17e9bdc4 100644
--- a/lib/net/ftp.rb
+++ b/lib/net/ftp.rb
@@ -77,7 +77,7 @@ module Net
# - #rename
# - #delete
#
- class FTP
+ class FTP < Protocol
include MonitorMixin
if defined?(OpenSSL::SSL)
include OpenSSL
@@ -338,7 +338,7 @@ module Net
# ProFTPD returns 425 for data connections if session is not reused.
ssl_sock.session = @ssl_session
end
- ssl_sock.connect
+ ssl_socket_connect(ssl_sock, @open_timeout)
if @ssl_context.verify_mode != VERIFY_NONE
ssl_sock.post_connection_check(@host)
end
diff --git a/test/net/ftp/test_ftp.rb b/test/net/ftp/test_ftp.rb
index 5028bd410f..380b80259a 100644
--- a/test/net/ftp/test_ftp.rb
+++ b/test/net/ftp/test_ftp.rb
@@ -2100,6 +2100,30 @@ EOF
ftp.close
end
end
+
+ def test_tls_connect_timeout
+ server = TCPServer.new(SERVER_ADDR, 0)
+ port = server.addr[1]
+ commands = []
+ sock = nil
+ @thread = Thread.start do
+ sock = server.accept
+ sock.print("220 (test_ftp).\r\n")
+ commands.push(sock.gets)
+ sock.print("234 AUTH success.\r\n")
+ end
+ begin
+ assert_raise(Net::OpenTimeout) do
+ Net::FTP.new("localhost",
+ port: port,
+ ssl: { ca_file: CA_FILE },
+ open_timeout: 0.1)
+ end
+ ensure
+ sock.close if sock
+ server.close
+ end
+ end
end
def test_abort_tls