Project

General

Profile

« Previous | Next » 

Revision c32fc82d

Added by normal about 7 years ago

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

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e