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