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>