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