From ba5eb6458a7e9a41ee76cfe45b84f997600681dc Mon Sep 17 00:00:00 2001 From: normal Date: Fri, 27 Oct 2017 23:26:48 +0000 Subject: socket: fix BasicSocket#*_nonblock buffering bugs from r58400 IO#read_nonblock and IO#write_nonblock take into account buffered data, so the Linux-only BasicSocket#read_nonblock and BasicSocket#write_nonblock methods must, too. This bug was only introduced in r58400 ("socket: avoid fcntl for read/write_nonblock on Linux") and does not affect any stable release. * ext/socket/basicsocket.c (rsock_init_basicsocket): * ext/socket/init.c (rsock_s_recvfrom_nonblock): * ext/socket/init.c (rsock_init_socket_init): * ext/socket/lib/socket.rb (def read_nonblock): * ext/socket/lib/socket.rb (def write_nonblock): * ext/socket/rubysocket.h (static inline void rsock_maybe_wait_fd): * test/socket/test_basicsocket.rb (def test_read_write_nonblock): [Feature #13362] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60496 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/socket/rubysocket.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'ext/socket/rubysocket.h') diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h index 352da8c56e..922df9b87b 100644 --- a/ext/socket/rubysocket.h +++ b/ext/socket/rubysocket.h @@ -430,6 +430,9 @@ static inline void rsock_maybe_wait_fd(int fd) { } # define MSG_DONTWAIT_RELIABLE 0 #endif +VALUE rsock_read_nonblock(VALUE sock, VALUE length, VALUE buf, VALUE ex); +VALUE rsock_write_nonblock(VALUE sock, VALUE buf, VALUE ex); + #if !defined HAVE_INET_NTOP && ! defined _WIN32 const char *inet_ntop(int, const void *, char *, size_t); #elif defined __MINGW32__ -- cgit v1.2.3