[ruby-cvs:65572] normal:r58400 (trunk): socket: avoid fcntl for read/write_nonblock on Linux

normal at ruby-lang.org normal at ruby-lang.org
Wed Apr 19 10:08:16 JST 2017


normal	2017-04-19 10:08:16 +0900 (Wed, 19 Apr 2017)

  New Revision: 58400

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=58400

  Log:
    socket: avoid fcntl for read/write_nonblock on Linux
    
    On platforms where MSG_DONTWAIT works reliably on all sockets
    (so far, I know of Linux), we can avoid fcntl syscalls and
    implement IO#write_nonblock and IO#read_nonblock in terms of the
    socket-specific send and recv family of syscalls.
    
    This avoids side effects on the socket, and also encourages
    generic code to be written in cases where IO wrappers like
    OpenSSL::SSL::SSLSocket are used.
    
    Perhaps in the future, side-effect-free non-blocking I/O can
    be standard on all files and OSes: https://cr.yp.to/unix/nonblock.html
    
    * ext/socket/lib/socket.rb (read_nonblock, write_nonblock):
      Linux-specific wrapper without side effects
      [ruby-core:80780] [Feature #13362]
    * test/socket/test_basicsocket.rb (test_read_write_nonblock):
      new test

  Modified files:
    trunk/NEWS
    trunk/ext/socket/lib/socket.rb
    trunk/test/socket/test_basicsocket.rb


More information about the ruby-cvs mailing list