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 c32fc82d0e 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
2017-04-19 01:08:16 +00:00
..
lib socket: avoid fcntl for read/write_nonblock on Linux 2017-04-19 01:08:16 +00:00
.document
addrinfo.h
ancdata.c * ext/socket/*.c: Add proper require for example to work. 2016-10-05 03:57:32 +00:00
basicsocket.c basicsocket.c: proper system call name 2017-04-08 03:25:50 +00:00
constants.c use frozen string of symbols 2015-04-14 03:31:28 +00:00
depend ruby tool/update-deps --fix 2017-03-22 06:00:18 +00:00
extconf.rb ext/socket/extconf.rb: fix a typo 2017-02-27 05:58:31 +00:00
getaddrinfo.c Drop support for BeOS 2015-11-24 00:17:11 +00:00
getnameinfo.c getnameinfo.c: rubysocket.h for inet_ntop 2016-08-13 01:26:24 +00:00
ifaddr.c ext/socket/ifaddr.c: remove empty ifaddr_mark 2015-12-09 20:07:23 +00:00
init.c rb_readwrite_syserr_fail 2015-12-23 14:58:47 +00:00
ipsocket.c IPSocket#inspect 2017-04-14 10:03:43 +00:00
mkconstants.rb handle ext/ as r53141 2015-12-16 05:31:54 +00:00
option.c * ext/socket/*.c: Add proper require for example to work. 2016-10-05 03:57:32 +00:00
raddrinfo.c ext/socket/raddrinfo.c (addrinfo_mark): avoid needless branch 2017-03-09 03:49:47 +00:00
rubysocket.h socket/option.c: inet_ntop 2016-08-02 03:37:02 +00:00
socket.c * ext/socket/*.c: Add proper require for example to work. 2016-10-05 03:57:32 +00:00
sockport.h * ext/socket: Bypass getaddrinfo() if node and serv are numeric. 2014-02-19 10:37:43 +00:00
sockssocket.c * ext/socket/basicsocket.c, ext/socket/sockssocket.c: 2014-12-07 10:40:27 +00:00
tcpserver.c socket: avoid arg parsing in rsock_s_accept_nonblock 2015-11-16 23:40:15 +00:00
tcpsocket.c rsock_addrinfo: specify address family 2015-10-13 03:14:13 +00:00
udpsocket.c * ext/socket/*.c: Add proper require for example to work. 2016-10-05 03:57:32 +00:00
unixserver.c * ext/socket/*.c: Add proper require for example to work. 2016-10-05 03:57:32 +00:00
unixsocket.c * ext/socket/*.c: Add proper require for example to work. 2016-10-05 03:57:32 +00:00