@@ -114,6 +114,28 @@ def test_connect_non_connected; require 'socket'
114
114
end
115
115
end if RUBY_VERSION > '2.2'
116
116
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
+
117
139
private
118
140
119
141
def server
@@ -137,13 +159,16 @@ def client(port)
137
159
ssl
138
160
end
139
161
162
+ def server_port ( ssl_server = server )
163
+ ssl_server . to_io . local_address . ip_port
164
+ end
165
+
140
166
def ssl_pair
141
167
ssl_server = server
142
168
thread = Thread . new do
143
169
ssl_server . accept . tap { ssl_server . close }
144
170
end
145
- port = ssl_server . to_io . local_address . ip_port
146
- ssl_client = client ( port )
171
+ ssl_client = client server_port ( ssl_server )
147
172
ssl_socket = thread . value
148
173
if block_given?
149
174
begin
@@ -156,9 +181,7 @@ def ssl_pair
156
181
return ssl_client , ssl_socket
157
182
end
158
183
ensure
159
- if thread && thread . alive?
160
- thread . kill ; thread . join
161
- end
184
+ thread . tap { thread . kill ; thread . join } if thread && thread . alive?
162
185
end
163
186
164
187
end
0 commit comments