-.\" $OpenBSD: timeout.9,v 1.11 2000/10/12 18:06:03 aaron Exp $
+.\" $OpenBSD: event.3,v 1.4 2002/07/12 18:50:48 provos Exp $
.\"
.\" Copyright (c) 2000 Artur Grabowski <art@openbsd.org>
.\" All rights reserved.
.Nm event_add ,
.Nm event_del ,
.Nm event_pending ,
-.Nm event_initalized ,
-.Nm timeout_set ,
-.Nm timeout_add ,
-.Nm timeout_del
-.Nm timeout_pending ,
-.Nm timeout_initalized ,
+.Nm event_initialized ,
+.Nm evtimer_set ,
+.Nm evtimer_add ,
+.Nm evtimer_del
+.Nm evtimer_pending ,
+.Nm evtimer_initialized ,
.Nm signal_set ,
.Nm signal_add ,
.Nm signal_del
.Nm signal_pending ,
-.Nm signal_initalized ,
+.Nm signal_initialized
.Nd execute a function when a specific event occurs
.Sh SYNOPSIS
+.Fd #include <sys/time.h>
.Fd #include <event.h>
.Ft void
.Fn "event_init"
.Ft int
.Fn "event_initialized" "struct event *ev"
.Ft void
-.Fn "timeout_set" "struct event *ev" "void (*fn)(int, short, void *)" "void *arg"
+.Fn "evtimer_set" "struct event *ev" "void (*fn)(int, short, void *)" "void *arg"
.Ft void
-.Fn "timeout_add" "struct event *ev" "struct timeval *"
+.Fn "evtimer_add" "struct event *ev" "struct timeval *"
.Ft void
-.Fn "timeout_del" "struct event *ev"
+.Fn "evtimer_del" "struct event *ev"
.Ft int
-.Fn "timeout_pending" "struct event *ev" "struct timeval *tv"
+.Fn "evtimer_pending" "struct event *ev" "struct timeval *tv"
.Ft int
-.Fn "timeout_initialized" "struct event *ev"
+.Fn "evtimer_initialized" "struct event *ev"
.Ft void
.Fn "signal_set" "struct event *ev" "int signal" "void (*fn)(int, short, void *)" "void *arg"
.Ft void
.Pp
The
.Nm event
-API needs to be initalized with
+API needs to be initialized with
.Fn event_init
before it can be used.
.Pp
.Fa fn
argument with an
.Fa int
-argument indicating the file descriptor, with a
+argument indicating the file descriptor, a
.Fa short
argument indicating the type of event, and a
.Fa void *
.Fa fd
indicates the file descriptor that should be monitored for events.
The events can be either
-.Va EV_READ,
-.Va EV_WRITE,
+.Va EV_READ ,
+.Va EV_WRITE ,
or both.
Indicating that an application can read or write from the file descriptor
respectively without blocking.
.Fn event_add
and
.Fn event_del
-and does not need to be reinitialized unless you wish to
-change the function called and/or the argument to it.
+and does not need to be reinitialized unless the function called and/or
+the argument to it are to be changed.
.Pp
The function
.Fn event_add
macro can be used to check if an event has been initialized.
.Pp
The functions
-.Fn timeout_set ,
-.Fn timeout_add ,
-.Fn timeout_del ,
-.Fn timeout_initialized ,
+.Fn evtimer_set ,
+.Fn evtimer_add ,
+.Fn evtimer_del ,
+.Fn evtimer_initialized ,
and
-.Fn timeout_pending
+.Fn evtimer_pending
are abbreviations for common situations where only a timeout is required.
The file descriptor passed will be 0, and the event type will be
.Va EV_TIMEOUT .
+/* $OpenBSD: event.c,v 1.2 2002/06/25 15:50:15 mickey Exp $ */
+
/*
* Copyright 2000-2002 Niels Provos <provos@citi.umich.edu>
* All rights reserved.
+/* $OpenBSD: event.h,v 1.4 2002/07/12 18:50:48 provos Exp $ */
+
/*
* Copyright 2000-2002 Niels Provos <provos@citi.umich.edu>
* All rights reserved.
void timeout_correct(struct timeval *);
void timeout_process(void);
-#define timeout_add(ev, tv) event_add(ev, tv)
-#define timeout_set(ev, cb, arg) event_set(ev, -1, 0, cb, arg)
-#define timeout_del(ev) event_del(ev)
-#define timeout_pending(ev, tv) event_pending(ev, EV_TIMEOUT, tv)
-#define timeout_initialized(ev) ((ev)->ev_flags & EVLIST_INIT)
+#define evtimer_add(ev, tv) event_add(ev, tv)
+#define evtimer_set(ev, cb, arg) event_set(ev, -1, 0, cb, arg)
+#define evtimer_del(ev) event_del(ev)
+#define evtimer_pending(ev, tv) event_pending(ev, EV_TIMEOUT, tv)
+#define evtimer_initialized(ev) ((ev)->ev_flags & EVLIST_INIT)
#define signal_add(ev, tv) event_add(ev, tv)
#define signal_set(ev, x, cb, arg) \
+/* $OpenBSD: kqueue.c,v 1.5 2002/07/10 14:41:31 art Exp $ */
+
/*
* Copyright 2000-2002 Niels Provos <provos@citi.umich.edu>
* All rights reserved.
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#include <errno.h>
for (i = 0; i < res; i++) {
/* XXX */
- int ncalls, res;
+ int ncalls, evres;
if (events[i].flags & EV_ERROR || events[i].filter == NULL)
continue;
ncalls = 0;
if (ev->ev_flags & EVLIST_ACTIVE) {
ncalls = ev->ev_ncalls;
- res = ev->ev_res;
+ evres = ev->ev_res;
}
ev->ev_flags &= ~EVLIST_X_KQINKERNEL;
event_del(ev);
if (ncalls)
- event_active(ev, res, ncalls);
+ event_active(ev, evres, ncalls);
}
return (0);
memset(&kev, 0, sizeof(kev));
kev.ident = ev->ev_fd;
kev.filter = EVFILT_READ;
- kev.flags = EV_ADD | EV_ONESHOT;
+ kev.flags = EV_ADD;
+ if (!(ev->ev_events & EV_PERSIST))
+ kev.filter |= EV_ONESHOT;
kev.udata = ev;
if (kq_insert(kqop, &kev) == -1)
memset(&kev, 0, sizeof(kev));
kev.ident = ev->ev_fd;
kev.filter = EVFILT_WRITE;
- kev.flags = EV_ADD | EV_ONESHOT;
+ kev.flags = EV_ADD;
+ if (!(ev->ev_events & EV_PERSIST))
+ kev.filter |= EV_ONESHOT;
kev.udata = ev;
if (kq_insert(kqop, &kev) == -1)
event_init();
/* Initalize one event */
- timeout_set(&timeout, timeout_cb, &timeout);
+ evtimer_set(&timeout, timeout_cb, &timeout);
timerclear(&tv);
tv.tv_sec = 2;
+/* $OpenBSD: select.c,v 1.2 2002/06/25 15:50:15 mickey Exp $ */
+
/*
* Copyright 2000-2002 Niels Provos <provos@citi.umich.edu>
* All rights reserved.