<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Though this doesn't preclude the I/O subsystem from actually reading data from the file descriptor. The C library I am bridging with Erlang has it's own reactive paradigm, yet it permits to use an external select/poll event reactor, so I only need to be notified by the emulator that there is data to be read on a given Fd, and pass that Fd to a C function call to do the reading/decoding (same for writing when the Fd is congested).  I realize there are many ways to skin the cat, but it looks to me that NIF API for hooking FDs with callbacks into the emulator's I/O loop would be the most beneficial...</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 29, 2015 at 2:16 PM, Michael Santos <span dir="ltr"><<a href="mailto:michael.santos@gmail.com" target="_blank">michael.santos@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Thu, Jan 29, 2015 at 09:20:25AM -0500, Serge Aleynikov wrote:<br>
> Is there a way to hook a file descriptor from within a NIF function to the<br>
> select/epoll/poll loop managed by the emulator with a callback invoked in<br>
> the "NIF-land" on activity detected on the file descriptor?<br>
><br>
> I am looking for similar functionality available to NIF functions that is<br>
> available when writing drivers using driver_select() call (*).  More<br>
> specifically, I have an eventfd file descriptor that I'd like to be<br>
> notified about without allocating a separate OS thread to poll on that FD<br>
> and return results by sending a message to a given Erlang Pid.<br>
><br>
> Thanks,<br>
><br>
> Serge<br>
><br>
> (*) <a href="http://www.erlang.org/doc/man/erl_driver.html#driver_select" target="_blank">http://www.erlang.org/doc/man/erl_driver.html#driver_select</a><br>
<br>
The simplest way is by passing the fd directly into a port:<br>
<br>
erlang:open_port({fd,Fd,Fd}, [binary,stream]).<br>
</blockquote></div><br></div>