@@ -114,6 +114,28 @@ def test_connect_non_connected; require 'socket'
114114 end
115115 end if RUBY_VERSION > '2.2'
116116
117+ def test_connect_nonblock
118+ ssl_server = server
119+ thread = Thread . new do
120+ ssl_server . accept . tap { ssl_server . close }
121+ end
122+
123+ host = "127.0.0.1"
124+ ctx = OpenSSL ::SSL ::SSLContext . new ( )
125+ ctx . ciphers = "ADH"
126+ client = TCPSocket . new host , server_port ( ssl_server )
127+ client = OpenSSL ::SSL ::SSLSocket . new ( client , ctx )
128+ begin
129+ client . connect_nonblock
130+ rescue OpenSSL ::SSL ::SSLErrorWaitReadable => e
131+ # #<OpenSSL::SSL::SSLErrorWaitReadable: read would block>
132+ puts e . inspect if $VERBOSE
133+ ensure
134+ thread . kill if thread . alive?
135+ client . close unless client . closed?
136+ end
137+ end if RUBY_VERSION > '2.2'
138+
117139 private
118140
119141 def server
@@ -137,13 +159,16 @@ def client(port)
137159 ssl
138160 end
139161
162+ def server_port ( ssl_server = server )
163+ ssl_server . to_io . local_address . ip_port
164+ end
165+
140166 def ssl_pair
141167 ssl_server = server
142168 thread = Thread . new do
143169 ssl_server . accept . tap { ssl_server . close }
144170 end
145- port = ssl_server . to_io . local_address . ip_port
146- ssl_client = client ( port )
171+ ssl_client = client server_port ( ssl_server )
147172 ssl_socket = thread . value
148173 if block_given?
149174 begin
@@ -156,9 +181,7 @@ def ssl_pair
156181 return ssl_client , ssl_socket
157182 end
158183 ensure
159- if thread && thread . alive?
160- thread . kill ; thread . join
161- end
184+ thread . tap { thread . kill ; thread . join } if thread && thread . alive?
162185 end
163186
164187end
0 commit comments