Home | History | Annotate | Line # | Download | only in isc
eventlib.h revision 1.1.1.1.10.2.2.1
      1  1.1.1.1.10.2.2.1    bouyer /*	$NetBSD: eventlib.h,v 1.1.1.1.10.2.2.1 2011/01/23 21:52:32 bouyer Exp $	*/
      2               1.1  christos 
      3               1.1  christos /*
      4               1.1  christos  * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
      5               1.1  christos  * Copyright (c) 1995-1999 by Internet Software Consortium
      6               1.1  christos  *
      7               1.1  christos  * Permission to use, copy, modify, and distribute this software for any
      8               1.1  christos  * purpose with or without fee is hereby granted, provided that the above
      9               1.1  christos  * copyright notice and this permission notice appear in all copies.
     10               1.1  christos  *
     11               1.1  christos  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
     12               1.1  christos  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     13               1.1  christos  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
     14               1.1  christos  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     15               1.1  christos  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     16               1.1  christos  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
     17               1.1  christos  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     18               1.1  christos  */
     19               1.1  christos 
     20               1.1  christos /* eventlib.h - exported interfaces for eventlib
     21               1.1  christos  * vix 09sep95 [initial]
     22               1.1  christos  *
     23  1.1.1.1.10.2.2.1    bouyer  * Id: eventlib.h,v 1.3.18.3 2008/01/23 02:12:01 marka Exp
     24               1.1  christos  */
     25               1.1  christos 
     26               1.1  christos #ifndef _EVENTLIB_H
     27               1.1  christos #define _EVENTLIB_H
     28               1.1  christos 
     29               1.1  christos #include <sys/types.h>
     30               1.1  christos #include <sys/uio.h>
     31               1.1  christos #include <sys/time.h>
     32               1.1  christos #include <stdio.h>
     33               1.1  christos 
     34               1.1  christos #ifndef __P
     35               1.1  christos # define __EVENTLIB_P_DEFINED
     36               1.1  christos # ifdef __STDC__
     37               1.1  christos #  define __P(x) x
     38               1.1  christos # else
     39               1.1  christos #  define __P(x) ()
     40               1.1  christos # endif
     41               1.1  christos #endif
     42               1.1  christos 
     43               1.1  christos /* In the absence of branded types... */
     44               1.1  christos typedef struct { void *opaque; } evConnID;
     45               1.1  christos typedef struct { void *opaque; } evFileID;
     46               1.1  christos typedef struct { void *opaque; } evStreamID;
     47               1.1  christos typedef struct { void *opaque; } evTimerID;
     48               1.1  christos typedef struct { void *opaque; } evWaitID;
     49               1.1  christos typedef struct { void *opaque; } evContext;
     50               1.1  christos typedef struct { void *opaque; } evEvent;
     51               1.1  christos 
     52               1.1  christos #define	evInitID(id) ((id)->opaque = NULL)
     53               1.1  christos #define	evTestID(id) ((id).opaque != NULL)
     54               1.1  christos 
     55               1.1  christos typedef void (*evConnFunc)__P((evContext, void *, int, const void *, int,
     56               1.1  christos 			       const void *, int));
     57               1.1  christos typedef void (*evFileFunc)__P((evContext, void *, int, int));
     58               1.1  christos typedef	void (*evStreamFunc)__P((evContext, void *, int, int));
     59               1.1  christos typedef void (*evTimerFunc)__P((evContext, void *,
     60               1.1  christos 				struct timespec, struct timespec));
     61               1.1  christos typedef	void (*evWaitFunc)__P((evContext, void *, const void *));
     62               1.1  christos 
     63               1.1  christos typedef	struct { unsigned char mask[256/8]; } evByteMask;
     64               1.1  christos #define	EV_BYTEMASK_BYTE(b) ((b) / 8)
     65               1.1  christos #define	EV_BYTEMASK_MASK(b) (1 << ((b) % 8))
     66               1.1  christos #define	EV_BYTEMASK_SET(bm, b) \
     67               1.1  christos 	((bm).mask[EV_BYTEMASK_BYTE(b)] |= EV_BYTEMASK_MASK(b))
     68               1.1  christos #define	EV_BYTEMASK_CLR(bm, b) \
     69               1.1  christos 	((bm).mask[EV_BYTEMASK_BYTE(b)] &= ~EV_BYTEMASK_MASK(b))
     70               1.1  christos #define	EV_BYTEMASK_TST(bm, b) \
     71               1.1  christos 	((bm).mask[EV_BYTEMASK_BYTE(b)] & EV_BYTEMASK_MASK(b))
     72               1.1  christos 
     73               1.1  christos #define	EV_POLL		1
     74               1.1  christos #define	EV_WAIT		2
     75               1.1  christos #define	EV_NULL		4
     76               1.1  christos 
     77               1.1  christos #define	EV_READ		1
     78               1.1  christos #define	EV_WRITE	2
     79               1.1  christos #define	EV_EXCEPT	4
     80               1.1  christos 
     81      1.1.1.1.10.1       jdc #define EV_WASNONBLOCKING 8	/* Internal library use. */
     82      1.1.1.1.10.1       jdc 
     83               1.1  christos /* eventlib.c */
     84               1.1  christos #define evCreate	__evCreate
     85               1.1  christos #define evSetDebug	__evSetDebug
     86               1.1  christos #define evDestroy	__evDestroy
     87               1.1  christos #define evGetNext	__evGetNext
     88               1.1  christos #define evDispatch	__evDispatch
     89               1.1  christos #define evDrop		__evDrop
     90               1.1  christos #define evMainLoop	__evMainLoop
     91               1.1  christos #define evHighestFD	__evHighestFD
     92               1.1  christos #define evGetOption	__evGetOption
     93               1.1  christos #define evSetOption	__evSetOption
     94               1.1  christos 
     95               1.1  christos int  evCreate __P((evContext *));
     96               1.1  christos void evSetDebug __P((evContext, int, FILE *));
     97               1.1  christos int  evDestroy __P((evContext));
     98               1.1  christos int  evGetNext __P((evContext, evEvent *, int));
     99               1.1  christos int  evDispatch __P((evContext, evEvent));
    100               1.1  christos void evDrop __P((evContext, evEvent));
    101               1.1  christos int  evMainLoop __P((evContext));
    102               1.1  christos int  evHighestFD __P((evContext));
    103               1.1  christos int  evGetOption __P((evContext *, const char *, int *));
    104               1.1  christos int  evSetOption __P((evContext *, const char *, int));
    105               1.1  christos 
    106               1.1  christos /* ev_connects.c */
    107               1.1  christos #define evListen	__evListen
    108               1.1  christos #define evConnect	__evConnect
    109               1.1  christos #define evCancelConn	__evCancelConn
    110               1.1  christos #define evHold		__evHold
    111               1.1  christos #define evUnhold	__evUnhold
    112               1.1  christos #define evTryAccept	__evTryAccept
    113               1.1  christos 
    114               1.1  christos int evListen __P((evContext, int, int, evConnFunc, void *, evConnID *));
    115               1.1  christos int evConnect __P((evContext, int, const void *, int,
    116               1.1  christos 		   evConnFunc, void *, evConnID *));
    117               1.1  christos int evCancelConn __P((evContext, evConnID));
    118               1.1  christos int evHold __P((evContext, evConnID));
    119               1.1  christos int evUnhold __P((evContext, evConnID));
    120               1.1  christos int evTryAccept __P((evContext, evConnID, int *));
    121               1.1  christos 
    122               1.1  christos /* ev_files.c */
    123               1.1  christos #define evSelectFD	__evSelectFD
    124               1.1  christos #define evDeselectFD	__evDeselectFD
    125               1.1  christos 
    126               1.1  christos int evSelectFD __P((evContext, int, int, evFileFunc, void *, evFileID *));
    127               1.1  christos int evDeselectFD __P((evContext, evFileID));
    128               1.1  christos 
    129               1.1  christos /* ev_streams.c */
    130               1.1  christos #define evConsIovec	__evConsIovec
    131               1.1  christos #define evWrite		__evWrite
    132               1.1  christos #define evRead		__evRead
    133               1.1  christos #define evTimeRW	__evTimeRW
    134               1.1  christos #define evUntimeRW	__evUntimeRW
    135               1.1  christos #define	evCancelRW	__evCancelRW
    136               1.1  christos 
    137               1.1  christos struct iovec evConsIovec __P((void *, size_t));
    138               1.1  christos int evWrite __P((evContext, int, const struct iovec *, int,
    139               1.1  christos 		 evStreamFunc func, void *, evStreamID *));
    140               1.1  christos int evRead __P((evContext, int, const struct iovec *, int,
    141               1.1  christos 		evStreamFunc func, void *, evStreamID *));
    142               1.1  christos int evTimeRW __P((evContext, evStreamID, evTimerID timer));
    143               1.1  christos int evUntimeRW __P((evContext, evStreamID));
    144               1.1  christos int evCancelRW __P((evContext, evStreamID));
    145               1.1  christos 
    146               1.1  christos /* ev_timers.c */
    147               1.1  christos #define evConsTime	__evConsTime
    148               1.1  christos #define evAddTime	__evAddTime
    149               1.1  christos #define evSubTime	__evSubTime
    150               1.1  christos #define evCmpTime	__evCmpTime
    151               1.1  christos #define	evTimeSpec	__evTimeSpec
    152               1.1  christos #define	evTimeVal	__evTimeVal
    153               1.1  christos 
    154               1.1  christos #define evNowTime		__evNowTime
    155               1.1  christos #define evUTCTime		__evUTCTime
    156               1.1  christos #define evLastEventTime		__evLastEventTime
    157               1.1  christos #define evSetTimer		__evSetTimer
    158               1.1  christos #define evClearTimer		__evClearTimer
    159               1.1  christos #define evConfigTimer		__evConfigTimer
    160               1.1  christos #define evResetTimer		__evResetTimer
    161               1.1  christos #define evSetIdleTimer		__evSetIdleTimer
    162               1.1  christos #define evClearIdleTimer	__evClearIdleTimer
    163               1.1  christos #define evResetIdleTimer	__evResetIdleTimer
    164               1.1  christos #define evTouchIdleTimer	__evTouchIdleTimer
    165               1.1  christos 
    166               1.1  christos struct timespec evConsTime __P((time_t sec, long nsec));
    167               1.1  christos struct timespec evAddTime __P((struct timespec, struct timespec));
    168               1.1  christos struct timespec evSubTime __P((struct timespec, struct timespec));
    169               1.1  christos struct timespec evNowTime __P((void));
    170               1.1  christos struct timespec evUTCTime __P((void));
    171               1.1  christos struct timespec evLastEventTime __P((evContext));
    172               1.1  christos struct timespec evTimeSpec __P((struct timeval));
    173               1.1  christos struct timeval evTimeVal __P((struct timespec));
    174               1.1  christos int evCmpTime __P((struct timespec, struct timespec));
    175               1.1  christos int evSetTimer __P((evContext, evTimerFunc, void *, struct timespec,
    176               1.1  christos 		    struct timespec, evTimerID *));
    177               1.1  christos int evClearTimer __P((evContext, evTimerID));
    178               1.1  christos int evConfigTimer __P((evContext, evTimerID, const char *param,
    179               1.1  christos 		      int value));
    180               1.1  christos int evResetTimer __P((evContext, evTimerID, evTimerFunc, void *,
    181               1.1  christos 		      struct timespec, struct timespec));
    182               1.1  christos int evSetIdleTimer __P((evContext, evTimerFunc, void *, struct timespec,
    183               1.1  christos 			evTimerID *));
    184               1.1  christos int evClearIdleTimer __P((evContext, evTimerID));
    185               1.1  christos int evResetIdleTimer __P((evContext, evTimerID, evTimerFunc, void *,
    186               1.1  christos 			  struct timespec));
    187               1.1  christos int evTouchIdleTimer __P((evContext, evTimerID));
    188               1.1  christos 
    189               1.1  christos /* ev_waits.c */
    190               1.1  christos #define evWaitFor	__evWaitFor
    191               1.1  christos #define evDo		__evDo
    192               1.1  christos #define evUnwait	__evUnwait
    193               1.1  christos #define evDefer		__evDefer
    194               1.1  christos 
    195               1.1  christos int evWaitFor __P((evContext, const void *, evWaitFunc, void *, evWaitID *));
    196               1.1  christos int evDo __P((evContext, const void *));
    197               1.1  christos int evUnwait __P((evContext, evWaitID));
    198               1.1  christos int evDefer __P((evContext, evWaitFunc, void *));
    199               1.1  christos 
    200               1.1  christos #ifdef __EVENTLIB_P_DEFINED
    201               1.1  christos # undef __P
    202               1.1  christos #endif
    203               1.1  christos 
    204               1.1  christos #endif /*_EVENTLIB_H*/
    205      1.1.1.1.10.1       jdc 
    206      1.1.1.1.10.1       jdc /*! \file */
    207