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