xref: /netbsd-src/lib/libc/include/isc/eventlib.h (revision 59a755a40f74ace0246c95b46337b1ee2e5c6b68)
1*59a755a4Schristos /*	$NetBSD: eventlib.h,v 1.3 2009/04/12 17:07:16 christos Exp $	*/
289abd492Schristos 
389abd492Schristos /*
4*59a755a4Schristos  * Copyright (C) 2004, 2005, 2008  Internet Systems Consortium, Inc. ("ISC")
5*59a755a4Schristos  * Copyright (C) 1995-1999, 2001, 2003  Internet Software Consortium.
689abd492Schristos  *
7*59a755a4Schristos  * Permission to use, copy, modify, and/or distribute this software for any
889abd492Schristos  * purpose with or without fee is hereby granted, provided that the above
989abd492Schristos  * copyright notice and this permission notice appear in all copies.
1089abd492Schristos  *
11*59a755a4Schristos  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12*59a755a4Schristos  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13*59a755a4Schristos  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14*59a755a4Schristos  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15*59a755a4Schristos  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16*59a755a4Schristos  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*59a755a4Schristos  * PERFORMANCE OF THIS SOFTWARE.
1889abd492Schristos  */
1989abd492Schristos 
2089abd492Schristos /* eventlib.h - exported interfaces for eventlib
2189abd492Schristos  * vix 09sep95 [initial]
2289abd492Schristos  *
23*59a755a4Schristos  * Id: eventlib.h,v 1.7 2008/11/14 02:36:51 marka Exp
2489abd492Schristos  */
2589abd492Schristos 
2689abd492Schristos #ifndef _EVENTLIB_H
2789abd492Schristos #define _EVENTLIB_H
2889abd492Schristos 
2989abd492Schristos #include <sys/types.h>
3089abd492Schristos #include <sys/uio.h>
3189abd492Schristos #include <sys/time.h>
3289abd492Schristos #include <stdio.h>
3389abd492Schristos 
3489abd492Schristos #ifndef __P
3589abd492Schristos # define __EVENTLIB_P_DEFINED
3689abd492Schristos # ifdef __STDC__
3789abd492Schristos #  define __P(x) x
3889abd492Schristos # else
3989abd492Schristos #  define __P(x) ()
4089abd492Schristos # endif
4189abd492Schristos #endif
4289abd492Schristos 
4389abd492Schristos /* In the absence of branded types... */
4489abd492Schristos typedef struct { void *opaque; } evConnID;
4589abd492Schristos typedef struct { void *opaque; } evFileID;
4689abd492Schristos typedef struct { void *opaque; } evStreamID;
4789abd492Schristos typedef struct { void *opaque; } evTimerID;
4889abd492Schristos typedef struct { void *opaque; } evWaitID;
4989abd492Schristos typedef struct { void *opaque; } evContext;
5089abd492Schristos typedef struct { void *opaque; } evEvent;
5189abd492Schristos 
5289abd492Schristos #define	evInitID(id) ((id)->opaque = NULL)
5389abd492Schristos #define	evTestID(id) ((id).opaque != NULL)
5489abd492Schristos 
5589abd492Schristos typedef void (*evConnFunc)__P((evContext, void *, int, const void *, int,
5689abd492Schristos 			       const void *, int));
5789abd492Schristos typedef void (*evFileFunc)__P((evContext, void *, int, int));
5889abd492Schristos typedef	void (*evStreamFunc)__P((evContext, void *, int, int));
5989abd492Schristos typedef void (*evTimerFunc)__P((evContext, void *,
6089abd492Schristos 				struct timespec, struct timespec));
6189abd492Schristos typedef	void (*evWaitFunc)__P((evContext, void *, const void *));
6289abd492Schristos 
6389abd492Schristos typedef	struct { unsigned char mask[256/8]; } evByteMask;
6489abd492Schristos #define	EV_BYTEMASK_BYTE(b) ((b) / 8)
6589abd492Schristos #define	EV_BYTEMASK_MASK(b) (1 << ((b) % 8))
6689abd492Schristos #define	EV_BYTEMASK_SET(bm, b) \
6789abd492Schristos 	((bm).mask[EV_BYTEMASK_BYTE(b)] |= EV_BYTEMASK_MASK(b))
6889abd492Schristos #define	EV_BYTEMASK_CLR(bm, b) \
6989abd492Schristos 	((bm).mask[EV_BYTEMASK_BYTE(b)] &= ~EV_BYTEMASK_MASK(b))
7089abd492Schristos #define	EV_BYTEMASK_TST(bm, b) \
7189abd492Schristos 	((bm).mask[EV_BYTEMASK_BYTE(b)] & EV_BYTEMASK_MASK(b))
7289abd492Schristos 
7389abd492Schristos #define	EV_POLL		1
7489abd492Schristos #define	EV_WAIT		2
7589abd492Schristos #define	EV_NULL		4
7689abd492Schristos 
7789abd492Schristos #define	EV_READ		1
7889abd492Schristos #define	EV_WRITE	2
7989abd492Schristos #define	EV_EXCEPT	4
8089abd492Schristos 
818e42b6c9Schristos #define EV_WASNONBLOCKING 8	/* Internal library use. */
828e42b6c9Schristos 
8389abd492Schristos /* eventlib.c */
8489abd492Schristos #define evCreate	__evCreate
8589abd492Schristos #define evSetDebug	__evSetDebug
8689abd492Schristos #define evDestroy	__evDestroy
8789abd492Schristos #define evGetNext	__evGetNext
8889abd492Schristos #define evDispatch	__evDispatch
8989abd492Schristos #define evDrop		__evDrop
9089abd492Schristos #define evMainLoop	__evMainLoop
9189abd492Schristos #define evHighestFD	__evHighestFD
9289abd492Schristos #define evGetOption	__evGetOption
9389abd492Schristos #define evSetOption	__evSetOption
9489abd492Schristos 
9589abd492Schristos int  evCreate __P((evContext *));
9689abd492Schristos void evSetDebug __P((evContext, int, FILE *));
9789abd492Schristos int  evDestroy __P((evContext));
9889abd492Schristos int  evGetNext __P((evContext, evEvent *, int));
9989abd492Schristos int  evDispatch __P((evContext, evEvent));
10089abd492Schristos void evDrop __P((evContext, evEvent));
10189abd492Schristos int  evMainLoop __P((evContext));
10289abd492Schristos int  evHighestFD __P((evContext));
10389abd492Schristos int  evGetOption __P((evContext *, const char *, int *));
10489abd492Schristos int  evSetOption __P((evContext *, const char *, int));
10589abd492Schristos 
10689abd492Schristos /* ev_connects.c */
10789abd492Schristos #define evListen	__evListen
10889abd492Schristos #define evConnect	__evConnect
10989abd492Schristos #define evCancelConn	__evCancelConn
11089abd492Schristos #define evHold		__evHold
11189abd492Schristos #define evUnhold	__evUnhold
11289abd492Schristos #define evTryAccept	__evTryAccept
11389abd492Schristos 
11489abd492Schristos int evListen __P((evContext, int, int, evConnFunc, void *, evConnID *));
11589abd492Schristos int evConnect __P((evContext, int, const void *, int,
11689abd492Schristos 		   evConnFunc, void *, evConnID *));
11789abd492Schristos int evCancelConn __P((evContext, evConnID));
11889abd492Schristos int evHold __P((evContext, evConnID));
11989abd492Schristos int evUnhold __P((evContext, evConnID));
12089abd492Schristos int evTryAccept __P((evContext, evConnID, int *));
12189abd492Schristos 
12289abd492Schristos /* ev_files.c */
12389abd492Schristos #define evSelectFD	__evSelectFD
12489abd492Schristos #define evDeselectFD	__evDeselectFD
12589abd492Schristos 
12689abd492Schristos int evSelectFD __P((evContext, int, int, evFileFunc, void *, evFileID *));
12789abd492Schristos int evDeselectFD __P((evContext, evFileID));
12889abd492Schristos 
12989abd492Schristos /* ev_streams.c */
13089abd492Schristos #define evConsIovec	__evConsIovec
13189abd492Schristos #define evWrite		__evWrite
13289abd492Schristos #define evRead		__evRead
13389abd492Schristos #define evTimeRW	__evTimeRW
13489abd492Schristos #define evUntimeRW	__evUntimeRW
13589abd492Schristos #define	evCancelRW	__evCancelRW
13689abd492Schristos 
13789abd492Schristos struct iovec evConsIovec __P((void *, size_t));
13889abd492Schristos int evWrite __P((evContext, int, const struct iovec *, int,
13989abd492Schristos 		 evStreamFunc func, void *, evStreamID *));
14089abd492Schristos int evRead __P((evContext, int, const struct iovec *, int,
14189abd492Schristos 		evStreamFunc func, void *, evStreamID *));
14289abd492Schristos int evTimeRW __P((evContext, evStreamID, evTimerID timer));
14389abd492Schristos int evUntimeRW __P((evContext, evStreamID));
14489abd492Schristos int evCancelRW __P((evContext, evStreamID));
14589abd492Schristos 
14689abd492Schristos /* ev_timers.c */
14789abd492Schristos #define evConsTime	__evConsTime
14889abd492Schristos #define evAddTime	__evAddTime
14989abd492Schristos #define evSubTime	__evSubTime
15089abd492Schristos #define evCmpTime	__evCmpTime
15189abd492Schristos #define	evTimeSpec	__evTimeSpec
15289abd492Schristos #define	evTimeVal	__evTimeVal
15389abd492Schristos 
15489abd492Schristos #define evNowTime		__evNowTime
15589abd492Schristos #define evUTCTime		__evUTCTime
15689abd492Schristos #define evLastEventTime		__evLastEventTime
15789abd492Schristos #define evSetTimer		__evSetTimer
15889abd492Schristos #define evClearTimer		__evClearTimer
15989abd492Schristos #define evConfigTimer		__evConfigTimer
16089abd492Schristos #define evResetTimer		__evResetTimer
16189abd492Schristos #define evSetIdleTimer		__evSetIdleTimer
16289abd492Schristos #define evClearIdleTimer	__evClearIdleTimer
16389abd492Schristos #define evResetIdleTimer	__evResetIdleTimer
16489abd492Schristos #define evTouchIdleTimer	__evTouchIdleTimer
16589abd492Schristos 
16689abd492Schristos struct timespec evConsTime __P((time_t sec, long nsec));
16789abd492Schristos struct timespec evAddTime __P((struct timespec, struct timespec));
16889abd492Schristos struct timespec evSubTime __P((struct timespec, struct timespec));
16989abd492Schristos struct timespec evNowTime __P((void));
17089abd492Schristos struct timespec evUTCTime __P((void));
17189abd492Schristos struct timespec evLastEventTime __P((evContext));
17289abd492Schristos struct timespec evTimeSpec __P((struct timeval));
17389abd492Schristos struct timeval evTimeVal __P((struct timespec));
17489abd492Schristos int evCmpTime __P((struct timespec, struct timespec));
17589abd492Schristos int evSetTimer __P((evContext, evTimerFunc, void *, struct timespec,
17689abd492Schristos 		    struct timespec, evTimerID *));
17789abd492Schristos int evClearTimer __P((evContext, evTimerID));
17889abd492Schristos int evConfigTimer __P((evContext, evTimerID, const char *param,
17989abd492Schristos 		      int value));
18089abd492Schristos int evResetTimer __P((evContext, evTimerID, evTimerFunc, void *,
18189abd492Schristos 		      struct timespec, struct timespec));
18289abd492Schristos int evSetIdleTimer __P((evContext, evTimerFunc, void *, struct timespec,
18389abd492Schristos 			evTimerID *));
18489abd492Schristos int evClearIdleTimer __P((evContext, evTimerID));
18589abd492Schristos int evResetIdleTimer __P((evContext, evTimerID, evTimerFunc, void *,
18689abd492Schristos 			  struct timespec));
18789abd492Schristos int evTouchIdleTimer __P((evContext, evTimerID));
18889abd492Schristos 
18989abd492Schristos /* ev_waits.c */
19089abd492Schristos #define evWaitFor	__evWaitFor
19189abd492Schristos #define evDo		__evDo
19289abd492Schristos #define evUnwait	__evUnwait
19389abd492Schristos #define evDefer		__evDefer
19489abd492Schristos 
19589abd492Schristos int evWaitFor __P((evContext, const void *, evWaitFunc, void *, evWaitID *));
19689abd492Schristos int evDo __P((evContext, const void *));
19789abd492Schristos int evUnwait __P((evContext, evWaitID));
19889abd492Schristos int evDefer __P((evContext, evWaitFunc, void *));
19989abd492Schristos 
20089abd492Schristos #ifdef __EVENTLIB_P_DEFINED
20189abd492Schristos # undef __P
20289abd492Schristos #endif
20389abd492Schristos 
20489abd492Schristos #endif /*_EVENTLIB_H*/
2058e42b6c9Schristos 
2068e42b6c9Schristos /*! \file */
207