eventlib.h revision 186090
1156952Sume/* 2156952Sume * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") 3156952Sume * Copyright (c) 1995-1999 by Internet Software Consortium 4156952Sume * 5156952Sume * Permission to use, copy, modify, and distribute this software for any 6156952Sume * purpose with or without fee is hereby granted, provided that the above 7156952Sume * copyright notice and this permission notice appear in all copies. 8156952Sume * 9156952Sume * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES 10156952Sume * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11156952Sume * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR 12156952Sume * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13156952Sume * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14156952Sume * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 15156952Sume * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16156952Sume */ 17156952Sume 18156952Sume/* eventlib.h - exported interfaces for eventlib 19156952Sume * vix 09sep95 [initial] 20156952Sume * 21186090Sume * $Id: eventlib.h,v 1.3.18.3 2008/01/23 02:12:01 marka Exp $ 22156952Sume */ 23156952Sume 24156952Sume#ifndef _EVENTLIB_H 25156952Sume#define _EVENTLIB_H 26156952Sume 27156952Sume#include <sys/types.h> 28156952Sume#include <sys/uio.h> 29156952Sume#include <sys/time.h> 30156952Sume#include <stdio.h> 31156952Sume 32186090Sume#include <isc/platform.h> 33186090Sume 34156952Sume#ifndef __P 35156952Sume# define __EVENTLIB_P_DEFINED 36156952Sume# ifdef __STDC__ 37156952Sume# define __P(x) x 38156952Sume# else 39156952Sume# define __P(x) () 40156952Sume# endif 41156952Sume#endif 42156952Sume 43156952Sume/* In the absence of branded types... */ 44156952Sumetypedef struct { void *opaque; } evConnID; 45156952Sumetypedef struct { void *opaque; } evFileID; 46156952Sumetypedef struct { void *opaque; } evStreamID; 47156952Sumetypedef struct { void *opaque; } evTimerID; 48156952Sumetypedef struct { void *opaque; } evWaitID; 49156952Sumetypedef struct { void *opaque; } evContext; 50156952Sumetypedef struct { void *opaque; } evEvent; 51156952Sume 52156952Sume#define evInitID(id) ((id)->opaque = NULL) 53156952Sume#define evTestID(id) ((id).opaque != NULL) 54156952Sume 55156952Sumetypedef void (*evConnFunc)__P((evContext, void *, int, const void *, int, 56156952Sume const void *, int)); 57156952Sumetypedef void (*evFileFunc)__P((evContext, void *, int, int)); 58156952Sumetypedef void (*evStreamFunc)__P((evContext, void *, int, int)); 59156952Sumetypedef void (*evTimerFunc)__P((evContext, void *, 60156952Sume struct timespec, struct timespec)); 61156952Sumetypedef void (*evWaitFunc)__P((evContext, void *, const void *)); 62156952Sume 63156952Sumetypedef struct { unsigned char mask[256/8]; } evByteMask; 64156952Sume#define EV_BYTEMASK_BYTE(b) ((b) / 8) 65156952Sume#define EV_BYTEMASK_MASK(b) (1 << ((b) % 8)) 66156952Sume#define EV_BYTEMASK_SET(bm, b) \ 67156952Sume ((bm).mask[EV_BYTEMASK_BYTE(b)] |= EV_BYTEMASK_MASK(b)) 68156952Sume#define EV_BYTEMASK_CLR(bm, b) \ 69156952Sume ((bm).mask[EV_BYTEMASK_BYTE(b)] &= ~EV_BYTEMASK_MASK(b)) 70156952Sume#define EV_BYTEMASK_TST(bm, b) \ 71156952Sume ((bm).mask[EV_BYTEMASK_BYTE(b)] & EV_BYTEMASK_MASK(b)) 72156952Sume 73156952Sume#define EV_POLL 1 74156952Sume#define EV_WAIT 2 75156952Sume#define EV_NULL 4 76156952Sume 77156952Sume#define EV_READ 1 78156952Sume#define EV_WRITE 2 79156952Sume#define EV_EXCEPT 4 80156952Sume 81156952Sume#define EV_WASNONBLOCKING 8 /* Internal library use. */ 82156952Sume 83156952Sume/* eventlib.c */ 84156952Sume#define evCreate __evCreate 85156952Sume#define evSetDebug __evSetDebug 86156952Sume#define evDestroy __evDestroy 87156952Sume#define evGetNext __evGetNext 88156952Sume#define evDispatch __evDispatch 89156952Sume#define evDrop __evDrop 90156952Sume#define evMainLoop __evMainLoop 91156952Sume#define evHighestFD __evHighestFD 92156952Sume#define evGetOption __evGetOption 93156952Sume#define evSetOption __evSetOption 94156952Sume 95156952Sumeint evCreate __P((evContext *)); 96156952Sumevoid evSetDebug __P((evContext, int, FILE *)); 97156952Sumeint evDestroy __P((evContext)); 98156952Sumeint evGetNext __P((evContext, evEvent *, int)); 99156952Sumeint evDispatch __P((evContext, evEvent)); 100156952Sumevoid evDrop __P((evContext, evEvent)); 101156952Sumeint evMainLoop __P((evContext)); 102156952Sumeint evHighestFD __P((evContext)); 103156952Sumeint evGetOption __P((evContext *, const char *, int *)); 104156952Sumeint evSetOption __P((evContext *, const char *, int)); 105156952Sume 106156952Sume/* ev_connects.c */ 107156952Sume#define evListen __evListen 108156952Sume#define evConnect __evConnect 109156952Sume#define evCancelConn __evCancelConn 110156952Sume#define evHold __evHold 111156952Sume#define evUnhold __evUnhold 112156952Sume#define evTryAccept __evTryAccept 113156952Sume 114156952Sumeint evListen __P((evContext, int, int, evConnFunc, void *, evConnID *)); 115156952Sumeint evConnect __P((evContext, int, const void *, int, 116156952Sume evConnFunc, void *, evConnID *)); 117156952Sumeint evCancelConn __P((evContext, evConnID)); 118156952Sumeint evHold __P((evContext, evConnID)); 119156952Sumeint evUnhold __P((evContext, evConnID)); 120156952Sumeint evTryAccept __P((evContext, evConnID, int *)); 121156952Sume 122156952Sume/* ev_files.c */ 123156952Sume#define evSelectFD __evSelectFD 124156952Sume#define evDeselectFD __evDeselectFD 125156952Sume 126156952Sumeint evSelectFD __P((evContext, int, int, evFileFunc, void *, evFileID *)); 127156952Sumeint evDeselectFD __P((evContext, evFileID)); 128156952Sume 129156952Sume/* ev_streams.c */ 130156952Sume#define evConsIovec __evConsIovec 131156952Sume#define evWrite __evWrite 132156952Sume#define evRead __evRead 133156952Sume#define evTimeRW __evTimeRW 134156952Sume#define evUntimeRW __evUntimeRW 135156952Sume#define evCancelRW __evCancelRW 136156952Sume 137156952Sumestruct iovec evConsIovec __P((void *, size_t)); 138156952Sumeint evWrite __P((evContext, int, const struct iovec *, int, 139156952Sume evStreamFunc func, void *, evStreamID *)); 140156952Sumeint evRead __P((evContext, int, const struct iovec *, int, 141156952Sume evStreamFunc func, void *, evStreamID *)); 142156952Sumeint evTimeRW __P((evContext, evStreamID, evTimerID timer)); 143156952Sumeint evUntimeRW __P((evContext, evStreamID)); 144156952Sumeint evCancelRW __P((evContext, evStreamID)); 145156952Sume 146156952Sume/* ev_timers.c */ 147156952Sume#define evConsTime __evConsTime 148156952Sume#define evAddTime __evAddTime 149156952Sume#define evSubTime __evSubTime 150156952Sume#define evCmpTime __evCmpTime 151156952Sume#define evTimeSpec __evTimeSpec 152156952Sume#define evTimeVal __evTimeVal 153156952Sume 154156952Sume#define evNowTime __evNowTime 155156952Sume#define evUTCTime __evUTCTime 156156952Sume#define evLastEventTime __evLastEventTime 157156952Sume#define evSetTimer __evSetTimer 158156952Sume#define evClearTimer __evClearTimer 159156952Sume#define evConfigTimer __evConfigTimer 160156952Sume#define evResetTimer __evResetTimer 161156952Sume#define evSetIdleTimer __evSetIdleTimer 162156952Sume#define evClearIdleTimer __evClearIdleTimer 163156952Sume#define evResetIdleTimer __evResetIdleTimer 164156952Sume#define evTouchIdleTimer __evTouchIdleTimer 165156952Sume 166156952Sumestruct timespec evConsTime __P((time_t sec, long nsec)); 167156952Sumestruct timespec evAddTime __P((struct timespec, struct timespec)); 168156952Sumestruct timespec evSubTime __P((struct timespec, struct timespec)); 169156952Sumestruct timespec evNowTime __P((void)); 170156952Sumestruct timespec evUTCTime __P((void)); 171156952Sumestruct timespec evLastEventTime __P((evContext)); 172156952Sumestruct timespec evTimeSpec __P((struct timeval)); 173156952Sumestruct timeval evTimeVal __P((struct timespec)); 174156952Sumeint evCmpTime __P((struct timespec, struct timespec)); 175156952Sumeint evSetTimer __P((evContext, evTimerFunc, void *, struct timespec, 176156952Sume struct timespec, evTimerID *)); 177156952Sumeint evClearTimer __P((evContext, evTimerID)); 178156952Sumeint evConfigTimer __P((evContext, evTimerID, const char *param, 179156952Sume int value)); 180156952Sumeint evResetTimer __P((evContext, evTimerID, evTimerFunc, void *, 181156952Sume struct timespec, struct timespec)); 182156952Sumeint evSetIdleTimer __P((evContext, evTimerFunc, void *, struct timespec, 183156952Sume evTimerID *)); 184156952Sumeint evClearIdleTimer __P((evContext, evTimerID)); 185156952Sumeint evResetIdleTimer __P((evContext, evTimerID, evTimerFunc, void *, 186156952Sume struct timespec)); 187156952Sumeint evTouchIdleTimer __P((evContext, evTimerID)); 188156952Sume 189156952Sume/* ev_waits.c */ 190156952Sume#define evWaitFor __evWaitFor 191156952Sume#define evDo __evDo 192156952Sume#define evUnwait __evUnwait 193156952Sume#define evDefer __evDefer 194156952Sume 195156952Sumeint evWaitFor __P((evContext, const void *, evWaitFunc, void *, evWaitID *)); 196156952Sumeint evDo __P((evContext, const void *)); 197156952Sumeint evUnwait __P((evContext, evWaitID)); 198156952Sumeint evDefer __P((evContext, evWaitFunc, void *)); 199156952Sume 200156952Sume#ifdef __EVENTLIB_P_DEFINED 201156952Sume# undef __P 202156952Sume#endif 203156952Sume 204156952Sume#endif /*_EVENTLIB_H*/ 205170242Sume 206170242Sume/*! \file */ 207