[ruby-core:93851] [Ruby master Feature#9091] [PATCH] accept_nonblock supports "exception: false"
From:
merch-redmine@...
Date:
2019-07-19 20:26:06 UTC
List:
ruby-core #93851
Issue #9091 has been updated by jeremyevans0 (Jeremy Evans).
Backport deleted (1.9.3: UNKNOWN, 2.0.0: UNKNOWN)
ruby -v deleted (ruby 2.1.0dev (2013-11-07 trunk 43560) [x86_64-linux])
Status changed from Open to Closed
Tracker changed from Bug to Feature
`accept_nonblock` started support `exception: false` in Ruby 2.3:
```
$ ruby22 -r socket -e 'p TCPServer.new(10001).accept_nonblock(exception: false)'
-e:1:in `accept_nonblock': wrong number of arguments (1 for 0) (ArgumentError)
from -e:1:in `<main>'
$ ruby23 -r socket -e 'p TCPServer.new(10001).accept_nonblock(exception: false)'
:wait_readable
```
----------------------------------------
Feature #9091: [PATCH] accept_nonblock supports "exception: false"
https://bugs.ruby-lang.org/issues/9091#change-79742
* Author: normalperson (Eric Wong)
* Status: Closed
* Priority: Normal
* Assignee: akr (Akira Tanaka)
* Target version:
----------------------------------------
git pull git://bogomips.org/ruby.git accept_nonblock-noraise
This is analogous to functionality found in IO#read_nonblock and
IO#wait_nonblock. Raising exceptions for common failures on
non-blocking servers is expensive and makes $DEBUG too noisy.
Benchmark results:
user system total real
default 2.530000 0.970000 3.500000 ( 3.492550)
exception: false 0.820000 0.910000 1.730000 ( 1.741821)
exception: false (cached arg) 0.670000 0.910000 1.580000 ( 1.583128)
--------------------- benchmark script ------------------------
require 'socket'
require 'benchmark'
s = TCPServer.new("localhost", 0)
nr = 1000000
Benchmark.bmbm do |x|
x.report("default") do
nr.times do
begin
s.accept_nonblock
rescue IO::WaitReadable
end
end
end
x.report("exception: false") do
nr.times do
begin
s.accept_nonblock(exception: false)
rescue IO::WaitReadable
abort "should not raise"
end
end
end
x.report("exception: false (cached arg)") do
arg = { exception: false }
nr.times do
begin
s.accept_nonblock(arg)
rescue IO::WaitReadable
abort "should not raise"
end
end
end
end
I also plan on doing others like recv,send,connect, too
---Files--------------------------------
0001-accept_nonblock-supports-exception-false.patch (9.49 KB)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>