Issue #9091 has been updated by Hiroshi SHIBATA. Target version changed from 2.1.0 to current: 2.2.0 ---------------------------------------- Bug #9091: [PATCH] accept_nonblock supports "exception: false" https://bugs.ruby-lang.org/issues/9091#change-44808 * Author: Eric Wong * Status: Open * Priority: Low * Assignee: Akira Tanaka * Category: ext * Target version: current: 2.2.0 * ruby -v: ruby 2.1.0dev (2013-11-07 trunk 43560) [x86_64-linux] * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN ---------------------------------------- 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) -- http://bugs.ruby-lang.org/