1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/ext/socket
normal c18df6d87c connect_nonblock supports "exception: false"
This is for consistency with accept_nonblock arguments and gives a
minor speedup from avoiding exceptions.
[ruby-core:68838] [Feature #11024]

* ext/openssl/ossl_ssl.c (ossl_ssl_connect_nonblock):
  support `exception: false'
* (get_no_exception): move function location
* ext/socket/socket.c (sock_connect_nonblock):
  support `exception: false'
* test/openssl/test_pair.rb (test_connect_accept_nonblock_no_exception):
  test `exception: false' on connect,
  rename from `test_accept_nonblock_no_exception'
* test/socket/test_nonblock.rb (test_connect_nonblock_no_exception):
  new test

Benchmark results:

default            0.050000   0.100000   0.150000 (  0.151307)
exception: false   0.030000   0.080000   0.110000 (  0.108840)

----------------------------8<-----------------------
require 'socket'
require 'benchmark'
require 'io/wait'
require 'tmpdir'

host = '127.0.0.1'
serv = TCPServer.new(host, 0) # UNIX sockets may not hit EINPROGRESS

nr = 5000 # few iterations to avoid running out of ports

addr = serv.getsockname
pid = fork do
  begin
    serv.accept.close
  rescue => e
    warn "#$$: #{e.message} (#{e.class})"
  end while true
end
at_exit { Process.kill(:TERM, pid) }
serv.close

Benchmark.bmbm do |x|
  x.report("default") do
    nr.times do
      s = Socket.new(:INET, :STREAM)
      s.setsockopt(:SOL_SOCKET, :SO_REUSEADDR, 1)
      begin
        s.connect_nonblock(addr)
      rescue IO::WaitWritable
        s.wait_writable
      end
      s.close
    end
  end
  x.report("exception: false") do
    nr.times do
      s = Socket.new(:INET, :STREAM)
      s.setsockopt(:SOL_SOCKET, :SO_REUSEADDR, 1)
      case s.connect_nonblock(addr, exception: false)
      when :wait_writable
        s.wait_writable
      end
      s.close
    end
  end
end

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50254 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-04-12 01:41:51 +00:00
..
lib
.document
addrinfo.h
ancdata.c
basicsocket.c
constants.c
depend
extconf.rb * ext/socket/extconf.rb: Solaris 11 has struct tcp_info.tcpi_ca_state, 2015-03-25 08:10:14 +00:00
getaddrinfo.c
getnameinfo.c
ifaddr.c
init.c accept_nonblock: favor rb_hash_lookup2 to avoid Hash#default 2015-03-12 22:04:24 +00:00
ipsocket.c
mkconstants.rb
option.c * ext/socket/extconf.rb: Solaris 11 has struct tcp_info.tcpi_ca_state, 2015-03-25 08:10:14 +00:00
raddrinfo.c raddrinfo.c: fix memory leak 2015-04-08 23:24:10 +00:00
rubysocket.h accept_nonblock supports "exception: false" 2015-03-12 03:03:04 +00:00
socket.c connect_nonblock supports "exception: false" 2015-04-12 01:41:51 +00:00
sockport.h
sockssocket.c
tcpserver.c accept_nonblock supports "exception: false" 2015-03-12 03:03:04 +00:00
tcpsocket.c
udpsocket.c
unixserver.c accept_nonblock supports "exception: false" 2015-03-12 03:03:04 +00:00
unixsocket.c