about summary refs log tree commit homepage
path: root/lib/dtas
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2014-12-22 00:59:36 +0000
committerEric Wong <e@80x24.org>2014-12-22 01:09:12 +0000
commit0018ac356e6d99d85768b222ec002c5a1b92b8a5 (patch)
treeb40e16f896ce987248acbad591e9b40f1769e661 /lib/dtas
parent7084ac44e95c018d2dcb0f6c65b1d3440cc5a0d0 (diff)
downloaddtas-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.rb2
-rw-r--r--lib/dtas/unix_client.rb4
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