diff options
author | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-05 06:47:36 +0000 |
---|---|---|
committer | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-05 06:47:36 +0000 |
commit | 9d9e9b22c5fb509fe6501642ae3dc1572acb808e (patch) | |
tree | 7a0709fd17b8430fece4f45becf9b89b5563d3a5 /lib/net/protocol.rb | |
parent | 3b8340df0eea259c429cf63ab539bf7acb36a3de (diff) | |
download | ruby-9d9e9b22c5fb509fe6501642ae3dc1572acb808e.tar.gz |
* lib/net/smtp.rb (tlsconnect): support timeout for TLS handshake.
[ruby-core:76893] [Bug #12678]
* lib/net/protocol.rb (ssl_socket_connect): new method to implement
timeout for TLS handshake.
* lib/net/http.rb (connect): use Net::Protocol#ssl_socket_connect.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56576 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/net/protocol.rb')
-rw-r--r-- | lib/net/protocol.rb | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/net/protocol.rb b/lib/net/protocol.rb index b53370931a..6b75b94cda 100644 --- a/lib/net/protocol.rb +++ b/lib/net/protocol.rb @@ -34,6 +34,24 @@ module Net # :nodoc: end End end + + def ssl_socket_connect(s, timeout) + if timeout + while true + raise Net::OpenTimeout if timeout <= 0 + start = Process.clock_gettime Process::CLOCK_MONOTONIC + # to_io is required because SSLSocket doesn't have wait_readable yet + case s.connect_nonblock(exception: false) + when :wait_readable; s.to_io.wait_readable(timeout) + when :wait_writable; s.to_io.wait_writable(timeout) + else; break + end + timeout -= Process.clock_gettime(Process::CLOCK_MONOTONIC) - start + end + else + s.connect + end + end end |