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