/* -*-c-*-
*
- * $Id: sel.h,v 1.6 1999/08/31 17:42:22 mdw Exp $
+ * $Id: sel.h,v 1.10 2004/04/08 01:36:13 mdw Exp $
*
* I/O multiplexing support
*
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: sel.h,v $
- * Revision 1.6 1999/08/31 17:42:22 mdw
- * New function `sel_force' to force a descriptor to be `selected'.
- *
- * Revision 1.5 1999/08/19 18:30:26 mdw
- * Implement hooks for foreign select-using systems (currently not well
- * tested).
- *
- * Revision 1.4 1999/05/22 13:39:15 mdw
- * Change spelling of `multiplexor'. ;-)
- *
- * Revision 1.3 1999/05/17 20:36:36 mdw
- * Make the selector type symbols an enumeration rather than a bunch of
- * #defines.
- *
- * Revision 1.2 1999/05/15 10:33:32 mdw
- * Fix copyright notices.
- *
- * Revision 1.1 1999/05/14 21:01:15 mdw
- * Integrated `select' handling bits from the background resolver project.
- *
- */
-
-#ifndef SEL_H
-#define SEL_H
+#ifndef MLIB_SEL_H
+#define MLIB_SEL_H
#ifdef __cplusplus
extern "C" {
typedef struct sel_file {
struct sel_file *next; /* Next file in the list */
- struct sel_file *prev; /* Previous file in the list */
+ struct sel_file **prev; /* Previous file in the list */
struct sel_state *s; /* Pointer to select multiplexor */
int fd; /* File descriptor */
unsigned mode; /* Interesting event for file */
void (*func)(int /*fd*/, unsigned /*mode*/, void */*p*/); /* Handler */
void *p; /* Argument for the handler */
+ struct sel_pendfile *pend; /* Pending file information */
} sel_file;
/* --- Waiting for a timeout --- */
typedef struct sel_timer {
struct sel_timer *next; /* Next timer in the list */
- struct sel_timer *prev; /* Previous timer in the list */
+ struct sel_timer **prev; /* Previous timer in the list */
struct timeval tv; /* Real time when timer should go */
void (*func)(struct timeval */*tv*/, void */*p*/); /* Handler function */
void *p; /* Argument for the handler */
+ struct sel_pendtimer *pend; /* Pending timer information */
} sel_timer;
/* --- A select argument block --- */
typedef struct sel_hook {
struct sel_hook *next; /* Next hook in the list */
- struct sel_hook *prev; /* Previous hook in the list */
+ struct sel_hook **prev; /* Previous hook in the list */
sel_hookfn before, after; /* Hook functions */
void *p; /* Argument for the hook functions */
} sel_hook;