Blame | Last modification | View Log | RSS feed
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>liboop: on_fd(), cancel_fd()</title><link rel="stylesheet" type="text/css" href="style.css"></head><body><h2>on_fd(), cancel_fd()</h2><pre>#include <oop.h>/* <em>Types of file descriptor activity.</em> */typedef enum {OOP_READ,OOP_WRITE,OOP_EXCEPTION<a href="#note-exception">*</a>,} oop_event;/* <em>Callback function prototype.</em> */typedef void *oop_call_fd(oop_source *source,int fd,oop_event event,void *user);/* <em>Register and unregister file descriptor activity event sinks.</em> */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);</pre><h3>Arguments.</h3><dl><dt><b>oop_source *source</b><dd>The event source to register or unregister the event sink with. This mustbe the same event source you got the function pointer from:"src->on_fd(src,...);".<p><dt><b>int fd</b><dd>The file descriptor to watch (or stop watching).<p><dt><b>oop_event event</b><dd>The kind of activity to watch for (or stop watching for). Must be one ofOOP_READ (triggered when data is available for reading on the specified filedescriptor), OOP_WRITE (triggered when buffer space is available to write onthe specified file descriptor), or OOP_EXCEPTION<a href="#note-exception">*</a>(triggered on any number of "exceptional" events, such as TCP urgent dataor system error).<p><dt><b>oop_call_fd *call</b><dd>The callback function (event sink) to add (or remove).<p><dt><b>void *user</b><dd>User data passed through to the callback function.<p></dl><h3>Description.</h3>Note that these are not global functions, but function pointers suppliedby the event source (in the <em>oop_source</em> structure) or by the user.<dl><dt><b>on_fd</b><dd>After this function is called, whenever the source's event loop detectsthe condition indicated by <em>event</em> (OOP_READ, OOP_WRITE, orOOP_EXCEPTION<a href="#note-exception">*</a>) on the file descriptor<em>fd</em>, it will call the function<em>call</em>, passing it a pointer to the event source, the file descriptor,the event type, and the same opaque <em>user</em> pointer passed to on_fd.This callback will be called repeatedly as long as the condition persists andit is not deactivated (see below). Only one callback may be registered per(event,fd) pair.<p><dt><b>cancel_fd</b><dd>Deactivate an event sink callback registered using on_fd (above).Any callback associated with the (event,fd) pair in question is removed.<p><dt><b>oop_call_fd</b><dd>Called when the event is triggered. Performs a user_specific action.Should return OOP_CONTINUE if the event loop should continue operating; anyother value (including OOP_HALT) will cause termination of the event loop.</dl><hr><p><a name="note-exception">*</a> <b>Compatibility note:</b> OOP_EXCEPTIONis only available in version 0.7 or newer.</p><hr><a href="ref">liboop reference</a></body></html>