From: merch-redmine@... Date: 2019-07-19T20:26:06+00:00 Subject: [ruby-core:93851] [Ruby master Feature#9091] [PATCH] accept_nonblock supports "exception: false" 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 `
' $ 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: