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