liboop: on_fd(), cancel_fd()

## on_fd(), cancel_fd()

    #include <oop.h>

    /* Types of file descriptor activity. */
    typedef enum {
            OOP_READ,
            OOP_WRITE,
            OOP_EXCEPTION*,
    } oop_event;

    /* Callback function prototype. */
    typedef void *oop_call_fd(oop_source *source,int fd,oop_event event,void *user);

    /* Register and unregister file descriptor activity event sinks. */
    void (*on_fd)(oop_source *source,int fd,oop_event event,oop_call_fd *call,void *user);
    void (*cancel_fd)(oop_source *source,int fd,oop_event event);

### Arguments.

oop_source *source
  The event source to register or unregister the event sink with. This must be the same event source you got the function pointer from: "src->on_fd(src,...);".

int fd
  The file descriptor to watch (or stop watching).

oop_event event
  The kind of activity to watch for (or stop watching for). Must be one of OOP_READ (triggered when data is available for reading on the specified file descriptor), OOP_WRITE (triggered when buffer space is available to write on the specified file descriptor), or OOP_EXCEPTION* (triggered on any number of "exceptional" events, such as TCP urgent data or system error).

oop_call_fd *call
  The callback function (event sink) to add (or remove).

void *user
  User data passed through to the callback function.

### Description.

Note that these are not global functions, but function pointers supplied by the event source (in the oop_source structure) or by the user.

on_fd
  After this function is called, whenever the source's event loop detects the condition indicated by event (OOP_READ, OOP_WRITE, or OOP_EXCEPTION*) on the file descriptor fd, it will call the function call, passing it a pointer to the event source, the file descriptor, the event type, and the same opaque user pointer passed to on_fd. This callback will be called repeatedly as long as the condition persists and it is not deactivated (see below). Only one callback may be registered per (event,fd) pair.

cancel_fd
  Deactivate an event sink callback registered using on_fd (above). Any callback associated with the (event,fd) pair in question is removed.

oop_call_fd
  Called when the event is triggered. Performs a user_specific action. Should return OOP_CONTINUE if the event loop should continue operating; any other value (including OOP_HALT) will cause termination of the event loop.

* Compatibility note: OOP_EXCEPTION is only available in version 0.7 or newer.

liboop reference