diff options
author | Eric Wong <e@80x24.org> | 2014-12-22 00:59:36 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2014-12-22 01:09:12 +0000 |
commit | 0018ac356e6d99d85768b222ec002c5a1b92b8a5 (patch) | |
tree | b40e16f896ce987248acbad591e9b40f1769e661 /lib/dtas | |
parent | 7084ac44e95c018d2dcb0f6c65b1d3440cc5a0d0 (diff) | |
download | dtas-0018ac356e6d99d85768b222ec002c5a1b92b8a5.tar.gz |
Favor IO.select over IO#wait since the latter makes another ioctl syscall (which we'll make anyways for IO#nread). Having BasicSocket#recvmsg and recvmsg_nonblock detect the buffer size requires extra syscalls, so pass explict maxmesglen, flags, and maxcontrollen args to elide auto-detection since we already have the buffered amount from IO#nread. This cuts more syscalls from the "dtas-tl cat" invocation with larger tracklists.
Diffstat (limited to 'lib/dtas')
-rw-r--r-- | lib/dtas/unix_accepted.rb | 2 | ||||
-rw-r--r-- | lib/dtas/unix_client.rb | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/lib/dtas/unix_accepted.rb b/lib/dtas/unix_accepted.rb index 2c82d2a..3008afc 100644 --- a/lib/dtas/unix_accepted.rb +++ b/lib/dtas/unix_accepted.rb @@ -56,7 +56,7 @@ class DTAS::UNIXAccepted # :nodoc: begin begin - msg, _, _ = io.recvmsg_nonblock(nread) + msg, _, _ = io.recvmsg_nonblock(nread, 0, 0) rescue Errno::EAGAIN return :wait_readable rescue EOFError, SystemCallError diff --git a/lib/dtas/unix_client.rb b/lib/dtas/unix_client.rb index 40dedcc..7382ea6 100644 --- a/lib/dtas/unix_client.rb +++ b/lib/dtas/unix_client.rb @@ -38,9 +38,9 @@ class DTAS::UNIXClient # :nodoc: end def res_wait(timeout = nil) - @to_io.wait(timeout) + IO.select([@to_io], nil, nil, timeout) nr = @to_io.nread nr > 0 or raise EOFError, "unexpected EOF from server" - @to_io.recvmsg[0] + @to_io.recvmsg(nr, 0, 0)[0] end end |