<!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 must
be 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 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<
a href="#note-exception">*<
/a>
(triggered on any number of
"exceptional" events, such as TCP urgent
data
or 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 supplied
by 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 detects
the condition indicated by <em>event</em> (OOP_READ, OOP_WRITE, or
OOP_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 and
it 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; any
other value (including OOP_HALT) will cause termination of the event loop.
</dl>
<hr>
<p><a name="note-exception">*</a> <b>Compatibility note:</b> OOP_EXCEPTION
is only available in version 0.7 or newer.</p>
<hr><a href="ref">liboop reference</a></body></html>