summaryrefslogtreecommitdiff
path: root/lib/webrick
diff options
context:
space:
mode:
Diffstat (limited to 'lib/webrick')
-rw-r--r--lib/webrick/server.rb10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/webrick/server.rb b/lib/webrick/server.rb
index 52a09f5186..2d678273e5 100644
--- a/lib/webrick/server.rb
+++ b/lib/webrick/server.rb
@@ -295,7 +295,15 @@ module WEBrick
end
if sock.respond_to?(:sync_close=) && @config[:SSLStartImmediately]
WEBrick::Utils.timeout(@config[:RequestTimeout]) do
- sock.accept # OpenSSL::SSL::SSLSocket#accept
+
+ # we must call OpenSSL::SSL::SSLSocket#accept_nonblock until
+ # it stop returning wait_* symbols:
+ case ret = sock.accept_nonblock(exception: false)
+ when :wait_readable, :wait_writable
+ sock.to_io.__send__(ret)
+ else
+ break
+ end while true
end
end
call_callback(:AcceptCallback, sock)