1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

lib/webrick/utils.rb: simplify by avoiding fcntl

IO#nonblock= and IO#close_on_exec= methods are simpler-to-use
and potentially more portable to for future OSes.
IO#nonblock= and IO#close_on_exec= are also smart enough to avoid
redundantly setting flags so a syscall may be avoided.

These methods could probably be removed entirely and inlined, but
it's unclear if there is 3rd-party code which relies on them.

* lib/webrick/utils.rb (set_non_blocking): use IO#nonblock=
* (set_close_on_exec): use IO#close_on_exec=
  [Feature #11136]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2015-05-17 08:22:11 +00:00
parent 932e916b9e
commit 29a914ff2e
2 changed files with 9 additions and 9 deletions

View file

@ -1,3 +1,9 @@
Sun May 17 17:21:29 2015 Eric Wong <e@80x24.org>
* lib/webrick/utils.rb (set_non_blocking): use IO#nonblock=
* (set_close_on_exec): use IO#close_on_exec=
[Feature #11136]
Sun May 17 15:01:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org> Sun May 17 15:01:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* numeric.c (num_positive_p, num_negative_p): add methods * numeric.c (num_positive_p, num_negative_p): add methods

View file

@ -9,7 +9,7 @@
# $IPR: utils.rb,v 1.10 2003/02/16 22:22:54 gotoyuzo Exp $ # $IPR: utils.rb,v 1.10 2003/02/16 22:22:54 gotoyuzo Exp $
require 'socket' require 'socket'
require 'fcntl' require 'io/nonblock'
require 'etc' require 'etc'
module WEBrick module WEBrick
@ -17,20 +17,14 @@ module WEBrick
## ##
# Sets IO operations on +io+ to be non-blocking # Sets IO operations on +io+ to be non-blocking
def set_non_blocking(io) def set_non_blocking(io)
flag = File::NONBLOCK io.nonblock = true if io.respond_to?(:nonblock=)
if defined?(Fcntl::F_GETFL)
flag |= io.fcntl(Fcntl::F_GETFL)
end
io.fcntl(Fcntl::F_SETFL, flag)
end end
module_function :set_non_blocking module_function :set_non_blocking
## ##
# Sets the close on exec flag for +io+ # Sets the close on exec flag for +io+
def set_close_on_exec(io) def set_close_on_exec(io)
if defined?(Fcntl::FD_CLOEXEC) io.close_on_exec = true if io.respond_to?(:close_on_exec=)
io.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
end
end end
module_function :set_close_on_exec module_function :set_close_on_exec