Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src move to kqueue branch for now



details:   https://anonhg.NetBSD.org/src/rev/78ca86b2dda7
branches:  trunk
changeset: 512571:78ca86b2dda7
user:      lukem <lukem%NetBSD.org@localhost>
date:      Tue Jul 10 11:59:50 2001 +0000

description:
move to kqueue branch for now

diffstat:

 lib/libc/sys/kqueue.2 |  462 -------------------------
 sys/kern/kern_event.c |  900 --------------------------------------------------
 sys/sys/event.h       |  181 ----------
 sys/sys/eventvar.h    |   46 --
 4 files changed, 0 insertions(+), 1589 deletions(-)

diffs (truncated from 1605 to 300 lines):

diff -r 29a4d091d355 -r 78ca86b2dda7 lib/libc/sys/kqueue.2
--- a/lib/libc/sys/kqueue.2     Tue Jul 10 10:33:55 2001 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,462 +0,0 @@
-.\" Copyright (c) 2000 Jonathan Lemon
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" $FreeBSD: src/lib/libc/sys/kqueue.2,v 1.22 2001/06/27 19:55:57 dd Exp $
-.\"
-.Dd April 14, 2000
-.Dt KQUEUE 2
-.Os
-.Sh NAME
-.Nm kqueue ,
-.Nm kevent
-.Nd kernel event notification mechanism
-.Sh LIBRARY
-.Lb libc
-.Sh SYNOPSIS
-.Fd #include <sys/types.h>
-.Fd #include <sys/event.h>
-.Fd #include <sys/time.h>
-.Ft int
-.Fn kqueue "void"
-.Ft int
-.Fn kevent "int kq" "const struct kevent *changelist" "int nchanges" "struct kevent *eventlist" "int nevents" "const struct timespec *timeout"
-.Fn EV_SET "&kev" ident filter flags fflags data udata
-.Sh DESCRIPTION
-.Fn kqueue
-provides a generic method of notifying the user when an event
-happens or a condition holds, based on the results of small
-pieces of kernel code termed filters.
-A kevent is identified by the (ident, filter) pair; there may only
-be one unique kevent per kqueue.
-.Pp
-The filter is executed upon the initial registration of a kevent
-in order to detect whether a preexisting condition is present, and is also
-executed whenever an event is passed to the filter for evaluation.
-If the filter determines that the condition should be reported,
-then the kevent is placed on the kqueue for the user to retrieve.
-.Pp
-The filter is also run when the user attempts to retrieve the kevent
-from the kqueue.
-If the filter indicates that the condition that triggered
-the event no longer holds, the kevent is removed from the kqueue and
-is not returned. 
-.Pp
-Multiple events which trigger the filter do not result in multiple
-kevents being placed on the kqueue; instead, the filter will aggregate
-the events into a single struct kevent.
-Calling
-.Fn close
-on a file descriptor will remove any kevents that reference the descriptor.
-.Pp
-.Fn kqueue
-creates a new kernel event queue and returns a descriptor.
-The queue is not inherited by a child created with
-.Xr fork 2 .
-However, if
-.Xr rfork 2
-is called without the
-.Dv RFFDG
-flag, then the descriptor table is shared,
-which will allow sharing of the kqueue between two processes.
-.Pp
-.Fn kevent
-is used to register events with the queue, and return any pending
-events to the user.
-.Fa changelist
-is a pointer to an array of
-.Va kevent 
-structures, as defined in
-.Aq Pa sys/event.h .
-All changes contained in the 
-.Fa changelist
-are applied before any pending events are read from the queue.
-.Fa nchanges
-gives the size of
-.Fa changelist .
-.Fa eventlist
-is a pointer to an array of kevent structures. 
-.Fa nevents
-determines the size of
-.Fa eventlist .
-If
-.Fa timeout
-is a non-NULL pointer, it specifies a maximum interval to wait
-for an event, which will be interpreted as a struct timespec.  If
-.Fa timeout
-is a NULL pointer,
-.Fn kevent
-waits indefinitely.  To effect a poll, the
-.Fa timeout
-argument should be non-NULL, pointing to a zero-valued
-.Va timespec
-structure.  The same array may be used for the
-.Fa changelist
-and 
-.Fa eventlist .
-.Pp
-.Fn EV_SET
-is a macro which is provided for ease of initializing a
-kevent structure.
-.Pp
-The
-.Va kevent
-structure is defined as:
-.Bd -literal
-struct kevent {
-       uintptr_t ident;        /* identifier for this event */
-       short     filter;       /* filter for event */
-       u_short   flags;        /* action flags for kqueue */
-       u_int     fflags;       /* filter flag value */
-       intptr_t  data;         /* filter data value */
-       void      *udata;       /* opaque user data identifier */
-};
-.Ed
-.Pp
-The fields of
-.Fa struct kevent
-are:
-.Bl -tag -width XXXfilter
-.It ident
-Value used to identify this event.
-The exact interpretation is determined by the attached filter,
-but often is a file descriptor.
-.It filter
-Identifies the kernel filter used to process this event.  The pre-defined
-system filters are described below.
-.It flags
-Actions to perform on the event.
-.It fflags
-Filter-specific flags.
-.It data
-Filter-specific data value. 
-.It udata
-Opaque user-defined value passed through the kernel unchanged.
-.El
-.Pp
-The
-.Va flags
-field can contain the following values:
-.Bl -tag -width XXXEV_ONESHOT
-.It EV_ADD
-Adds the event to the kqueue.  Re-adding an existing event
-will modify the parameters of the original event, and not result
-in a duplicate entry.  Adding an event automatically enables it,
-unless overridden by the EV_DISABLE flag.
-.It EV_ENABLE
-Permit
-.Fn kevent
-to return the event if it is triggered.
-.It EV_DISABLE
-Disable the event so
-.Fn kevent
-will not return it.  The filter itself is not disabled.
-.It EV_DELETE
-Removes the event from the kqueue.  Events which are attached to 
-file descriptors are automatically deleted on the last close of 
-the descriptor.
-.It EV_ONESHOT
-Causes the event to return only the first occurrence of the filter
-being triggered.  After the user retrieves the event from the kqueue,
-it is deleted.
-.It EV_CLEAR
-After the event is retrieved by the user, its state is reset.
-This is useful for filters which report state transitions
-instead of the current state.  Note that some filters may automatically
-set this flag internally.
-.It EV_EOF
-Filters may set this flag to indicate filter-specific EOF condition.
-.It EV_ERROR
-See
-.Sx RETURN VALUES
-below.
-.El
-.Pp
-The predefined system filters are listed below.
-Arguments may be passed to and from the filter via the 
-.Va fflags
-and
-.Va data
-fields in the kevent structure.
-.Bl -tag -width EVFILT_SIGNAL
-.It EVFILT_READ
-Takes a descriptor as the identifier, and returns whenever
-there is data available to read.
-The behavior of the filter is slightly different depending
-on the descriptor type.
-.Pp
-.Bl -tag -width 2n
-.It Sockets
-Sockets which have previously been passed to
-.Fn listen
-return when there is an incoming connection pending.
-.Va data
-contains the size of the listen backlog.
-.Pp
-Other socket descriptors return when there is data to be read,
-subject to the
-.Dv SO_RCVLOWAT
-value of the socket buffer.
-This may be overridden with a per-filter low water mark at the
-time the filter is added by setting the 
-NOTE_LOWAT 
-flag in 
-.Va fflags ,
-and specifying the new low water mark in
-.Va data .
-On return,
-.Va data
-contains the number of bytes in the socket buffer.
-.Pp
-If the read direction of the socket has shutdown, then the filter
-also sets EV_EOF in
-.Va flags ,
-and returns the socket error (if any) in 
-.Va fflags .
-It is possible for EOF to be returned (indicating the connection is gone)
-while there is still data pending in the socket buffer.
-.It Vnodes
-Returns when the file pointer is not at the end of file.
-.Va data
-contains the offset from current position to end of file,
-and may be negative.
-.It "Fifos, Pipes"
-Returns when the there is data to read;
-.Va data
-contains the number of bytes available.
-.Pp
-When the last writer disconnects, the filter will set EV_EOF in
-.Va flags .
-This may be cleared by passing in EV_CLEAR, at which point the
-filter will resume waiting for data to become available before
-returning.
-.El
-.It EVFILT_WRITE
-Takes a descriptor as the identifier, and returns whenever
-it is possible to write to the descriptor.  For sockets, pipes
-and fifos, 
-.Va data
-will contain the amount of space remaining in the write buffer.
-The filter will set EV_EOF when the reader disconnects, and for
-the fifo case, this may be cleared by use of EV_CLEAR.
-Note that this filter is not supported for vnodes.
-.Pp
-For sockets, the low water mark and socket error handling is 
-identical to the EVFILT_READ case.
-.It EVFILT_AIO
-The sigevent portion of the AIO request is filled in, with
-.Va sigev_notify_kqueue 
-containing the descriptor of the kqueue that the event should
-be attached to,
-.Va sigev_value
-containing the udata value, and 
-.Va sigev_notify
-set to SIGEV_EVENT.
-When the aio_* function is called, the event will be registered
-with the specified kqueue, and the
-.Va ident
-argument set to the
-.Fa struct aiocb
-returned by the aio_* function.
-The filter returns under the same conditions as aio_error.
-.Pp
-Alternatively, a kevent structure may be initialized, with 
-.Va ident
-containing the descriptor of the kqueue, and the
-address of the kevent structure placed in the
-.Va aio_lio_opcode
-field of the AIO request.  However, this approach will not work on
-architectures with 64-bit pointers, and should be considered depreciated.
-.It EVFILT_VNODE
-Takes a file descriptor as the identifier and the events to watch for in 
-.Va fflags ,
-and returns when one or more of the requested events occurs on the descriptor.
-The events to monitor are:
-.Bl -tag -width XXNOTE_RENAME
-.It NOTE_DELETE



Home | Main Index | Thread Index | Old Index