Issue #12013 has been updated by Tiago Cardoso.


If the option would be for more verbosity, I'd opt for :readable and :writable, but tell me what you think that it's more readable:

<pre>
socket.wait(:readable, writable)
socket.wait(:read, write)
socket.wait(:rw)

socket.wait(:readable_writable)
socket.wait([:readable, writable]) # allocates one array
</pre>

There are a lot of alternatives, I'd go for less verbosity (:r, :w, :rw), but don't have a strong opinion about the best API. 

----------------------------------------
Misc #12013: io/wait: allow to wait on readable and writable
https://bugs.ruby-lang.org/issues/12013#change-56377

* Author: Tiago Cardoso
* Status: Feedback
* Priority: Normal
* Assignee: Nobuyoshi Nakada
----------------------------------------
If I have a socket and I want to wait for both read and write events, IO.select is my only co-pilot:

~~~ruby
IO.select([mysock],[mysock])
~~~

the beautiful thing about the `#wait_readable` and `#wait_writable` methods is that I can have a friendlier way to compose sockets for other event loops which monkey-patching `IO.select`. One example is celluloid-io, which has its own wrappers around the network sockets classes.

But I think there is a limitation when I want to listen for both reads and writes. See both examples below:

~~~ruby
IO.select([mysock],[mysock], nil, 30)
# as opposed to
require 'io/wait'
mysock.wait_readable(30) && mysock.wait_writable(30)
~~~

in the second example, I can wait potentially 60 seconds, instead of the 30 from the first example.

I'm not sure which API it should be, my main reference is the celluloid io reactor api in this case:

~~~ruby
mysock.wait(:r)
mysock.wait(:w)
mysock.wait(:rw)
~~~

drawback: there is already a wait method, so backwards compatibility would be gone. or would it? Current arity is 0, which means, one could still alias it to `#wait_readable` if no argument is passed.




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>