Easy: if it's a read event, it's stdin; if it's a write event, it's stdout :)
You've raised an interesting problem. It is easy to fix this in the
specific case of stdin/stdout, however what happens when your process
is passed a pair of fds from some other process (or more than one
process, using AF_UNIX), and told to read one and write the other?
What happens when you have 10 fds from different sources, some for
reading and some for writing (quite typical in a complex server)?
With the epoll API, your process has to know whether any paids or fds
correspond to the same file *, in order to decide whether to register
one interested in READ+WRITE or two interests separately.
Unfortunately I cannot think of a way for a process to know, in
general, whether two fds that it is passed correspond to the same file
*. Well, apart from trying epoll on it and seeing what happens :/
Perhaps this indicates the epoll API _is_ flawed. Epoll maintains
this state mapping:
file * -> (event mask, event states)
when it ought to maintain this:
(file *, event type) -> event state
In other words, perhaps epoll should be keeping registered interest in
read events and registered interest in write events completely
separate.
I suspect changing the API to do that wouldn't even break any of the
existing apps.
Davide, what do you think?
-- Jamie
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/