summaryrefslogtreecommitdiff
path: root/lib/webrick
diff options
context:
space:
mode:
Diffstat (limited to 'lib/webrick')
-rw-r--r--lib/webrick/server.rb1
-rw-r--r--lib/webrick/utils.rb8
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/webrick/server.rb b/lib/webrick/server.rb
index 46575734c1..5e57966255 100644
--- a/lib/webrick/server.rb
+++ b/lib/webrick/server.rb
@@ -146,6 +146,7 @@ module WEBrick
begin
sock = svr.accept
sock.sync = true
+ Utils::set_non_blocking(sock)
Utils::set_close_on_exec(sock)
rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPROTO => ex
# TCP connection was established but RST segment was sent
diff --git a/lib/webrick/utils.rb b/lib/webrick/utils.rb
index 7283704c1d..cf9da6f2ce 100644
--- a/lib/webrick/utils.rb
+++ b/lib/webrick/utils.rb
@@ -18,6 +18,14 @@ end
module WEBrick
module Utils
+ def set_non_blocking(io)
+ flag = File::NONBLOCK
+ if defined?(Fcntl::F_GETFL)
+ flag |= io.fcntl(Fcntl::F_GETFL)
+ end
+ io.fcntl(Fcntl::F_SETFL, flag)
+ end
+ module_function :set_non_blocking
def set_close_on_exec(io)
if defined?(Fcntl::FD_CLOEXEC)