diff options
Diffstat (limited to 'lib/webrick')
-rw-r--r-- | lib/webrick/server.rb | 10 |
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) |