xref: /freebsd/share/man/man9/kqueue.9 (revision 90db62aca6ec7d5f9806bf59b1e1f2413850f9b2)
190db62acSJohn-Mark Gurney.\" Copyright 2004 John-Mark Gurney
290db62acSJohn-Mark Gurney.\" All rights reserved.
390db62acSJohn-Mark Gurney.\"
490db62acSJohn-Mark Gurney.\" Redistribution and use in source and binary forms, with or without
590db62acSJohn-Mark Gurney.\" modification, are permitted provided that the following conditions
690db62acSJohn-Mark Gurney.\" are met:
790db62acSJohn-Mark Gurney.\" 1. Redistributions of source code must retain the above copyright
890db62acSJohn-Mark Gurney.\"    notice, this list of conditions and the following disclaimer.
990db62acSJohn-Mark Gurney.\" 2. Redistributions in binary form must reproduce the above copyright
1090db62acSJohn-Mark Gurney.\"    notice, this list of conditions and the following disclaimer in the
1190db62acSJohn-Mark Gurney.\"    documentation and/or other materials provided with the distribution.
1290db62acSJohn-Mark Gurney.\"
1390db62acSJohn-Mark Gurney.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1490db62acSJohn-Mark Gurney.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1590db62acSJohn-Mark Gurney.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1690db62acSJohn-Mark Gurney.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1790db62acSJohn-Mark Gurney.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1890db62acSJohn-Mark Gurney.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1990db62acSJohn-Mark Gurney.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2090db62acSJohn-Mark Gurney.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2190db62acSJohn-Mark Gurney.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2290db62acSJohn-Mark Gurney.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2390db62acSJohn-Mark Gurney.\" SUCH DAMAGE.
2490db62acSJohn-Mark Gurney.\"
2590db62acSJohn-Mark Gurney.\" $FreeBSD$
2690db62acSJohn-Mark Gurney.\"
2790db62acSJohn-Mark Gurney.Dd September 1, 2004
2890db62acSJohn-Mark Gurney.Dt KQUEUE 9
2990db62acSJohn-Mark Gurney.Os
3090db62acSJohn-Mark Gurney.Sh NAME
3190db62acSJohn-Mark Gurney.Nm kqueue_add_filteropts , kqueue_del_filteropts
3290db62acSJohn-Mark Gurney.Nd "add and remove kqueue event filters"
3390db62acSJohn-Mark Gurney.Pp
3490db62acSJohn-Mark Gurney.Nm kqfd_register
3590db62acSJohn-Mark Gurney.Nd "register a kevent with kqueue by fd"
3690db62acSJohn-Mark Gurney.Pp
3790db62acSJohn-Mark Gurney.Nm knote_fdclose
3890db62acSJohn-Mark Gurney.Nd "deactivate all knotes associated with fd"
3990db62acSJohn-Mark Gurney.Pp
4090db62acSJohn-Mark Gurney.Nm knlist_add , knlist_remove , knlist_remove_inevent , knlist_empty , knlist_init , knlist_destroy , knlist_clear , knlist_delete
4190db62acSJohn-Mark Gurney.Nd "initalize and manipulate lists of knotes"
4290db62acSJohn-Mark Gurney.Pp
4390db62acSJohn-Mark Gurney.Nm KNOTE_LOCKED , KNOTE_UNLOCKED
4490db62acSJohn-Mark Gurney.Nd "activate knotes on a knlist"
4590db62acSJohn-Mark Gurney.Sh SYNOPSIS
4690db62acSJohn-Mark Gurney.In sys/event.h
4790db62acSJohn-Mark Gurney.Ft int
4890db62acSJohn-Mark Gurney.Fn kqueue_add_filteropts "int filt" "struct filterops *"
4990db62acSJohn-Mark Gurney.Ft int
5090db62acSJohn-Mark Gurney.Fn kqueue_del_filteropts "int filt"
5190db62acSJohn-Mark Gurney.Ft int
5290db62acSJohn-Mark Gurney.Fn kqfd_register "int fd" "struct kevent *" "struct thread *" "int waitok"
5390db62acSJohn-Mark Gurney.Ft void
5490db62acSJohn-Mark Gurney.Fn knote_fdclose "struct thread *" "int fd"
5590db62acSJohn-Mark Gurney.Ft void
5690db62acSJohn-Mark Gurney.Fn knlist_add "struct knlist *" "struct knote *" "int islocked"
5790db62acSJohn-Mark Gurney.Ft void
5890db62acSJohn-Mark Gurney.Fn knlist_remove "struct knlist *" "struct knote *" "int islocked"
5990db62acSJohn-Mark Gurney.Ft void
6090db62acSJohn-Mark Gurney.Fn knlist_remove_inevent "struct knlist *" "struct knote *"
6190db62acSJohn-Mark Gurney.Ft int
6290db62acSJohn-Mark Gurney.Fn knlist_empty "struct knlist *"
6390db62acSJohn-Mark Gurney.Ft void
6490db62acSJohn-Mark Gurney.Fn knlist_init "struct knlist *" "void *lock" "void (*kl_lock)(void *)" "void (*kl_unlock)(void *) "int (*kl_locked)(void *)"
6590db62acSJohn-Mark Gurney.Ft void
6690db62acSJohn-Mark Gurney.Fn knlist_destroy "struct knlist *"
6790db62acSJohn-Mark Gurney.Ft void
6890db62acSJohn-Mark Gurney.Fn knlist_clear "struct knlist *" "int islocked"
6990db62acSJohn-Mark Gurney.Ft void
7090db62acSJohn-Mark Gurney.Fn knlist_delete "struct knlist *" "struct thread *" "int islocked"
7190db62acSJohn-Mark Gurney.Ft void
7290db62acSJohn-Mark Gurney.Fn KNOTE_LOCKED "struct knlist *" "long hint"
7390db62acSJohn-Mark Gurney.Ft void
7490db62acSJohn-Mark Gurney.Fn KNOTE_UNLOCKED "struct knlist *" "long hint"
7590db62acSJohn-Mark Gurney.Sh DESCRIPTION
7690db62acSJohn-Mark GurneyThe functions
7790db62acSJohn-Mark Gurney.Fn kqueue_add_filteropts
7890db62acSJohn-Mark Gurneyand
7990db62acSJohn-Mark Gurney.Fn kqueue_del_filteropts
8090db62acSJohn-Mark Gurneyallows the addition and removal of a filter type.
8190db62acSJohn-Mark GurneyThe filter is staticly defined by the
8290db62acSJohn-Mark Gurney.Dv EVFILT_*
8390db62acSJohn-Mark Gurneymacros.
8490db62acSJohn-Mark GurneyThe function
8590db62acSJohn-Mark Gurney.Fn kqueue_add_filteropts
8690db62acSJohn-Mark Gurneywill make filt available.  The
8790db62acSJohn-Mark Gurney.Vt "struct filterops"
8890db62acSJohn-Mark Gurneyhas the following members:
8990db62acSJohn-Mark Gurney.Bl -tag -width ".Va f_attach"
9090db62acSJohn-Mark Gurney.It Va f_isfd
9190db62acSJohn-Mark GurneyIf
9290db62acSJohn-Mark Gurney.Va f_isfd
9390db62acSJohn-Mark Gurneyis set,
9490db62acSJohn-Mark Gurney.Va ident
9590db62acSJohn-Mark Gurneyin
9690db62acSJohn-Mark Gurney.Vt "struct kevent"
9790db62acSJohn-Mark Gurneyis taken to be a file descriptor.
9890db62acSJohn-Mark GurneyIn this case, the knote passed into
9990db62acSJohn-Mark Gurney.Va f_attach
10090db62acSJohn-Mark Gurneywill have the
10190db62acSJohn-Mark Gurney.Va kn_fp
10290db62acSJohn-Mark Gurneymember initalized to the
10390db62acSJohn-Mark Gurney.Vt "struct file *"
10490db62acSJohn-Mark Gurneythat represense the file descriptor.
10590db62acSJohn-Mark Gurney.It Va f_attach
10690db62acSJohn-Mark GurneyThe
10790db62acSJohn-Mark Gurney.Va f_attach
10890db62acSJohn-Mark Gurneymember will be called when attaching a
10990db62acSJohn-Mark Gurney.Vt knote
11090db62acSJohn-Mark Gurneyto the object.
11190db62acSJohn-Mark GurneyThe method should call
11290db62acSJohn-Mark Gurney.Fn knlist_add
11390db62acSJohn-Mark Gurneyto add the
11490db62acSJohn-Mark Gurney.Vt knote
11590db62acSJohn-Mark Gurneyto the list that was initalized with
11690db62acSJohn-Mark Gurney.Fn knlist_init .
11790db62acSJohn-Mark GurneyThe call to
11890db62acSJohn-Mark Gurney.Fn knlist_add
11990db62acSJohn-Mark Gurneyis only necesary if the object can have multiple knotes associated with it.
12090db62acSJohn-Mark GurneyIf there is no
12190db62acSJohn-Mark Gurney.Vt knlist
12290db62acSJohn-Mark Gurneyto call
12390db62acSJohn-Mark Gurney.Fn knlist_add
12490db62acSJohn-Mark Gurneywith, the function
12590db62acSJohn-Mark Gurney.Va f_attach
12690db62acSJohn-Mark Gurneymust clear the
12790db62acSJohn-Mark Gurney.Dv KN_DETACHED
12890db62acSJohn-Mark Gurneybit of
12990db62acSJohn-Mark Gurney.Va kn_status
13090db62acSJohn-Mark Gurneyin the
13190db62acSJohn-Mark Gurney.Va knote .
13290db62acSJohn-Mark GurneyThe function shall return 0 on success, or appropriate errno for the failure.
13390db62acSJohn-Mark GurneyDurning
13490db62acSJohn-Mark Gurney.Va f_attach
13590db62acSJohn-Mark Gurneyit is valid to change the
13690db62acSJohn-Mark Gurney.Va kn_fops
13790db62acSJohn-Mark Gurneypointer to a different pointer.
13890db62acSJohn-Mark GurneyThis will change the
13990db62acSJohn-Mark Gurney.Va f_event
14090db62acSJohn-Mark Gurneyand
14190db62acSJohn-Mark Gurney.Va f_detach
14290db62acSJohn-Mark Gurneymembers called when processing the knote.
14390db62acSJohn-Mark Gurney.It Va f_detach
14490db62acSJohn-Mark GurneyThe
14590db62acSJohn-Mark Gurney.Va f_detach
14690db62acSJohn-Mark Gurneymember will be called to detach the
14790db62acSJohn-Mark Gurney.Vt knote
14890db62acSJohn-Mark Gurneyif the
14990db62acSJohn-Mark Gurney.Vt knote
15090db62acSJohn-Mark Gurneyhas not already been detached by a call to
15190db62acSJohn-Mark Gurney.Fn knlist_remove .
15290db62acSJohn-Mark Gurney.It Va f_event
15390db62acSJohn-Mark GurneyThe
15490db62acSJohn-Mark Gurney.Va f_event
15590db62acSJohn-Mark Gurneymeber will be called to update the status of the
15690db62acSJohn-Mark Gurney.Vt knote .
15790db62acSJohn-Mark GurneyIf the function returns 0, it will be assumed that the object is not
15890db62acSJohn-Mark Gurneyready (or no longer ready) to be woken up.
15990db62acSJohn-Mark GurneyThe hint field will be 0 when called scanning knotes to see which
16090db62acSJohn-Mark Gurneyare available.
16190db62acSJohn-Mark GurneyOtherwise the hint field will be populated with the value passed to
16290db62acSJohn-Mark Gurney.Dv KNOTE_LOCKED
16390db62acSJohn-Mark Gurneyor
16490db62acSJohn-Mark Gurney.Dv KNOTE_UNLOCKED .
16590db62acSJohn-Mark GurneyThe
16690db62acSJohn-Mark Gurney.Va kn_data
16790db62acSJohn-Mark Gurneyvalue should be updated as necessary to reflect the current value, such as
16890db62acSJohn-Mark Gurneynumber of bytes available for reading, or buffer space available for writing.
16990db62acSJohn-Mark GurneyIf the note needs to be removed,
17090db62acSJohn-Mark Gurney.Fn knlist_remove_inevent
17190db62acSJohn-Mark Gurneymust be called.
17290db62acSJohn-Mark GurneyThe function
17390db62acSJohn-Mark Gurney.Fn knlist_remove_inevent
17490db62acSJohn-Mark Gurneywill remove the note from the list, the
17590db62acSJohn-Mark Gurney.Va f_detach
17690db62acSJohn-Mark Gurneymember will not be called and the
17790db62acSJohn-Mark Gurney.Va knote
17890db62acSJohn-Mark Gurneywill not be returned as an event.
17990db62acSJohn-Mark Gurney.El
18090db62acSJohn-Mark Gurney.Pp
18190db62acSJohn-Mark GurneyThe function
18290db62acSJohn-Mark Gurney.Fn kqfd_register
18390db62acSJohn-Mark Gurneywill register the
18490db62acSJohn-Mark Gurney.Vt kevent
18590db62acSJohn-Mark Gurneyon the kqueue file descriptor
18690db62acSJohn-Mark Gurney.Fa fd .
18790db62acSJohn-Mark GurneyIf it is safe to sleep, waitok should be set.
18890db62acSJohn-Mark Gurney.Pp
18990db62acSJohn-Mark GurneyThe function
19090db62acSJohn-Mark Gurney.Fn knote_fdclose
19190db62acSJohn-Mark Gurneyis used to delete all
19290db62acSJohn-Mark Gurney.Vt knotes
19390db62acSJohn-Mark Gurneyassociated with
19490db62acSJohn-Mark Gurney.Fa fd .
19590db62acSJohn-Mark GurneyOnce returned there will no longer be any
19690db62acSJohn-Mark Gurney.Vt knotes
19790db62acSJohn-Mark Gurneyassociated with the
19890db62acSJohn-Mark Gurney.Fa fd .
19990db62acSJohn-Mark GurneyThe
20090db62acSJohn-Mark Gurney.Vt knotes
20190db62acSJohn-Mark Gurneyremoved will never be returned from a
20290db62acSJohn-Mark Gurney.Xr kevent 2
20390db62acSJohn-Mark Gurneycall, so if userland uses the
20490db62acSJohn-Mark Gurney.Vt knote
20590db62acSJohn-Mark Gurneyto track resources, they will be leaked.
20690db62acSJohn-Mark GurneyThe
20790db62acSJohn-Mark Gurney.Fn FILEDESC_LOCK
20890db62acSJohn-Mark Gurneymust be held over the call to
20990db62acSJohn-Mark Gurney.Fn knote_fdclose
21090db62acSJohn-Mark Gurneyso that file descriptors cannot be added or removed.
21190db62acSJohn-Mark Gurney.Pp
21290db62acSJohn-Mark GurneyThe
21390db62acSJohn-Mark Gurney.Fn knlist_*
21490db62acSJohn-Mark Gurneyfamily of functions are for managing knotes associated with an object.
21590db62acSJohn-Mark GurneyA
21690db62acSJohn-Mark Gurney.Va knlist
21790db62acSJohn-Mark Gurneyis not required, but is commonly used.
21890db62acSJohn-Mark GurneyIf used, the
21990db62acSJohn-Mark Gurney.Vt knlist
22090db62acSJohn-Mark Gurneymust be initalized with the
22190db62acSJohn-Mark Gurney.Fn knlist_init
22290db62acSJohn-Mark Gurneyfunction.
22390db62acSJohn-Mark GurneyIf
22490db62acSJohn-Mark Gurney.Fa lock
22590db62acSJohn-Mark Gurneyis
22690db62acSJohn-Mark Gurney.Dv NULL ,
22790db62acSJohn-Mark Gurneyan internal lock will be used and the remaining arguments will be ignored.
22890db62acSJohn-Mark GurneyThe
22990db62acSJohn-Mark Gurney.Fa kl_lock , kl_unlock
23090db62acSJohn-Mark Gurneyand
23190db62acSJohn-Mark Gurney.Fa kl_locked
23290db62acSJohn-Mark Gurneywill be used to manipulate
23390db62acSJohn-Mark Gurney.Fa lock .
23490db62acSJohn-Mark GurneyIf the argument is
23590db62acSJohn-Mark Gurney.Dv NULL ,
23690db62acSJohn-Mark Gurneya default routine operating on
23790db62acSJohn-Mark Gurney.Vt "struct mtx *"
23890db62acSJohn-Mark Gurneywill be used.
23990db62acSJohn-Mark GurneyThe
24090db62acSJohn-Mark Gurney.Vt knlist
24190db62acSJohn-Mark Gurneystructure may be embeded in your object structure.
24290db62acSJohn-Mark GurneyThe
24390db62acSJohn-Mark Gurney.Fa lock
24490db62acSJohn-Mark Gurneywill be held over calls to
24590db62acSJohn-Mark Gurney.Fn f_event .
24690db62acSJohn-Mark GurneyIf
24790db62acSJohn-Mark Gurney.Dv NULL
24890db62acSJohn-Mark Gurneyis passed for the mutex, a private mutex will be used.
24990db62acSJohn-Mark GurneyThe function
25090db62acSJohn-Mark Gurney.Fn knlist_empty
25190db62acSJohn-Mark Gurneyrequires that
25290db62acSJohn-Mark Gurney.Fa lock
25390db62acSJohn-Mark Gurneybe held.
25490db62acSJohn-Mark GurneyThe function
25590db62acSJohn-Mark Gurney.Fn knlist_clear
25690db62acSJohn-Mark Gurneyis used to remove all knotes associated with the list.
25790db62acSJohn-Mark GurneyThe
25890db62acSJohn-Mark Gurney.Fa islocked
25990db62acSJohn-Mark Gurneyargument declares if you have the
26090db62acSJohn-Mark Gurney.Fa lock
26190db62acSJohn-Mark Gurneyhas been aquired.
26290db62acSJohn-Mark GurneyAll
26390db62acSJohn-Mark Gurney.Vt knotes
26490db62acSJohn-Mark Gurneywill be marked as detached, and
26590db62acSJohn-Mark Gurney.Dv EV_ONESHOT
26690db62acSJohn-Mark Gurneywill be set so that the
26790db62acSJohn-Mark Gurney.Vt knote
26890db62acSJohn-Mark Gurneywill be deleted after the next scan.
26990db62acSJohn-Mark GurneyThe function
27090db62acSJohn-Mark Gurney.Fn knlist_destroy
27190db62acSJohn-Mark Gurneyis to be used at object destruction time.
27290db62acSJohn-Mark GurneyThere must be no
27390db62acSJohn-Mark Gurney.Vt knotes
27490db62acSJohn-Mark Gurneyassociated with the
27590db62acSJohn-Mark Gurney.Vt knlist
27690db62acSJohn-Mark Gurney.Fn ( knlist_clear
27790db62acSJohn-Mark Gurneybe called before or
27890db62acSJohn-Mark Gurney.Fn knlist_empty
27990db62acSJohn-Mark Gurneyreturns true) and no more
28090db62acSJohn-Mark Gurney.Vt knotes
28190db62acSJohn-Mark Gurneyare able to be attached to the object.
28290db62acSJohn-Mark Gurney.Pp
28390db62acSJohn-Mark Gurney.Pp
28490db62acSJohn-Mark GurneyThe functions
28590db62acSJohn-Mark Gurney.Fn KNOTE_LOCKED
28690db62acSJohn-Mark Gurneyand
28790db62acSJohn-Mark Gurney.Fn KNOTE_UNLOCKED
28890db62acSJohn-Mark Gurneyare used to notify knotes about events associated with your object.
28990db62acSJohn-Mark GurneyIt will iterated over all
29090db62acSJohn-Mark Gurney.Vt knotes
29190db62acSJohn-Mark Gurneyon the list calling the
29290db62acSJohn-Mark Gurney.Va f_event
29390db62acSJohn-Mark Gurneyfunction associated with the
29490db62acSJohn-Mark Gurney.Vt knote .
29590db62acSJohn-Mark GurneyThe function
29690db62acSJohn-Mark Gurney.Fn KNOTE_LOCKED
29790db62acSJohn-Mark Gurneymust be used if the lock associated with the
29890db62acSJohn-Mark Gurney.Fa knl
29990db62acSJohn-Mark Gurneypassed in is held.
30090db62acSJohn-Mark GurneyThe function
30190db62acSJohn-Mark Gurney.Fn KNOTE_UNLOCKED
30290db62acSJohn-Mark Gurneywill aquire the lock before iterating over the list of
30390db62acSJohn-Mark Gurney.Ft knotes .
30490db62acSJohn-Mark Gurney.Sh RETURN VALUES
30590db62acSJohn-Mark GurneyThe function
30690db62acSJohn-Mark Gurney.Fn kqueue_add_filteropts
30790db62acSJohn-Mark Gurneywill return zero on success,
30890db62acSJohn-Mark Gurney.Er EINVAL
30990db62acSJohn-Mark Gurneyin the case of an invalid
31090db62acSJohn-Mark Gurney.Fa filt
31190db62acSJohn-Mark Gurneyor
31290db62acSJohn-Mark Gurney.Er EEXIST
31390db62acSJohn-Mark Gurneyif the filter has already been installed.
31490db62acSJohn-Mark Gurney.Pp
31590db62acSJohn-Mark GurneyThe function
31690db62acSJohn-Mark Gurney.Fn kqueue_del_filteropts
31790db62acSJohn-Mark Gurneywill return zero on success,
31890db62acSJohn-Mark Gurney.Er EINVAL
31990db62acSJohn-Mark Gurneyin the case of an invalid
32090db62acSJohn-Mark Gurney.Fa filt
32190db62acSJohn-Mark Gurneyor
32290db62acSJohn-Mark Gurney.Er EBUSY
32390db62acSJohn-Mark Gurneyif the filter is still in use.
32490db62acSJohn-Mark Gurney.Pp
32590db62acSJohn-Mark GurneyThe function
32690db62acSJohn-Mark Gurney.Fn kqfd_register
32790db62acSJohn-Mark Gurneywill return zero on success,
32890db62acSJohn-Mark Gurney.Er EBADF
32990db62acSJohn-Mark Gurneyif the file descriptor is not a kqueue or any of the possible values returned
33090db62acSJohn-Mark Gurneyby
33190db62acSJohn-Mark Gurney.Xr kevent .
33290db62acSJohn-Mark Gurney.Sh SEE ALSO
33390db62acSJohn-Mark Gurney.Xr kqueue 2 ,
33490db62acSJohn-Mark Gurney.Xr kevent 2
33590db62acSJohn-Mark Gurney.Sh AUTHORS
33690db62acSJohn-Mark GurneyThis
33790db62acSJohn-Mark Gurneymanual page was written by
33890db62acSJohn-Mark Gurney.An John-Mark Gurney Aq jmg@FreeBSD.org .
339