xref: /freebsd/share/man/man9/kqueue.9 (revision 99be3bc6d9cf1ae40a667404cc0c225b38f75cbb)
174a603ebSRuslan Ermilov.\" Copyright 2006 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.\"
2705f240c5SJohn-Mark Gurney.Dd December 28, 2006
2890db62acSJohn-Mark Gurney.Dt KQUEUE 9
2990db62acSJohn-Mark Gurney.Os
3090db62acSJohn-Mark Gurney.Sh NAME
3174a603ebSRuslan Ermilov.Nm kqueue_add_filteropts , kqueue_del_filteropts ,
3274a603ebSRuslan Ermilov.Nm kqfd_register ,
3374a603ebSRuslan Ermilov.Nm knote_fdclose ,
3474a603ebSRuslan Ermilov.Nm knlist_add , knlist_remove , knlist_remove_inevent , knlist_empty ,
3574a603ebSRuslan Ermilov.Nm knlist_init , knlist_destroy , knlist_clear , knlist_delete ,
3690db62acSJohn-Mark Gurney.Nm KNOTE_LOCKED , KNOTE_UNLOCKED
3774a603ebSRuslan Ermilov.Nd "event delivery subsystem"
3890db62acSJohn-Mark Gurney.Sh SYNOPSIS
3990db62acSJohn-Mark Gurney.In sys/event.h
4090db62acSJohn-Mark Gurney.Ft int
4174a603ebSRuslan Ermilov.Fn kqueue_add_filteropts "int filt" "struct filterops *filtops"
4290db62acSJohn-Mark Gurney.Ft int
4390db62acSJohn-Mark Gurney.Fn kqueue_del_filteropts "int filt"
4490db62acSJohn-Mark Gurney.Ft int
4574a603ebSRuslan Ermilov.Fn kqfd_register "int fd" "struct kevent *kev" "struct thread *td" "int waitok"
4690db62acSJohn-Mark Gurney.Ft void
4774a603ebSRuslan Ermilov.Fn knote_fdclose "struct thread *td" "int fd"
4890db62acSJohn-Mark Gurney.Ft void
4974a603ebSRuslan Ermilov.Fn knlist_add "struct knlist *knl" "struct knote *kn" "int islocked"
5090db62acSJohn-Mark Gurney.Ft void
5174a603ebSRuslan Ermilov.Fn knlist_remove "struct knlist *knl" "struct knote *kn" "int islocked"
5290db62acSJohn-Mark Gurney.Ft void
5374a603ebSRuslan Ermilov.Fn knlist_remove_inevent "struct knlist *knl" "struct knote *kn"
5490db62acSJohn-Mark Gurney.Ft int
5574a603ebSRuslan Ermilov.Fn knlist_empty "struct knlist *knl"
5690db62acSJohn-Mark Gurney.Ft void
5774a603ebSRuslan Ermilov.Fo knlist_init
5874a603ebSRuslan Ermilov.Fa "struct knlist *knl"
5974a603ebSRuslan Ermilov.Fa "void *lock"
6074a603ebSRuslan Ermilov.Fa "void \*[lp]*kl_lock\*[rp]\*[lp]void *\*[rp]"
6174a603ebSRuslan Ermilov.Fa "void \*[lp]*kl_unlock\*[rp]\*[lp]void *\*[rp]"
6274a603ebSRuslan Ermilov.Fa "int \*[lp]*kl_locked\*[rp]\*[lp]void *\*[rp]"
6374a603ebSRuslan Ermilov.Fc
6490db62acSJohn-Mark Gurney.Ft void
6574a603ebSRuslan Ermilov.Fn knlist_destroy "struct knlist *knl"
6690db62acSJohn-Mark Gurney.Ft void
6774a603ebSRuslan Ermilov.Fn knlist_clear "struct knlist *knl" "int islocked"
6890db62acSJohn-Mark Gurney.Ft void
6974a603ebSRuslan Ermilov.Fn knlist_delete "struct knlist *knl" "struct thread *td" "int islocked"
7090db62acSJohn-Mark Gurney.Ft void
7174a603ebSRuslan Ermilov.Fn KNOTE_LOCKED "struct knlist *knl" "long hint"
7290db62acSJohn-Mark Gurney.Ft void
7374a603ebSRuslan Ermilov.Fn KNOTE_UNLOCKED "struct knlist *knl" "long hint"
7490db62acSJohn-Mark Gurney.Sh DESCRIPTION
7590db62acSJohn-Mark GurneyThe functions
7690db62acSJohn-Mark Gurney.Fn kqueue_add_filteropts
7790db62acSJohn-Mark Gurneyand
7890db62acSJohn-Mark Gurney.Fn kqueue_del_filteropts
7974a603ebSRuslan Ermilovallow for the addition and removal of a filter type.
8074a603ebSRuslan ErmilovThe filter is statically defined by the
8190db62acSJohn-Mark Gurney.Dv EVFILT_*
8290db62acSJohn-Mark Gurneymacros.
8390db62acSJohn-Mark GurneyThe function
8490db62acSJohn-Mark Gurney.Fn kqueue_add_filteropts
8574a603ebSRuslan Ermilovwill make
8674a603ebSRuslan Ermilov.Fa filt
8774a603ebSRuslan Ermilovavailable.
8874a603ebSRuslan ErmilovThe
8990db62acSJohn-Mark Gurney.Vt "struct filterops"
9090db62acSJohn-Mark Gurneyhas the following members:
9190db62acSJohn-Mark Gurney.Bl -tag -width ".Va f_attach"
9290db62acSJohn-Mark Gurney.It Va f_isfd
9390db62acSJohn-Mark GurneyIf
9490db62acSJohn-Mark Gurney.Va f_isfd
9590db62acSJohn-Mark Gurneyis set,
9690db62acSJohn-Mark Gurney.Va ident
9790db62acSJohn-Mark Gurneyin
9890db62acSJohn-Mark Gurney.Vt "struct kevent"
9990db62acSJohn-Mark Gurneyis taken to be a file descriptor.
10074a603ebSRuslan ErmilovIn this case, the
10174a603ebSRuslan Ermilov.Vt knote
10274a603ebSRuslan Ermilovpassed into
10390db62acSJohn-Mark Gurney.Va f_attach
10490db62acSJohn-Mark Gurneywill have the
10590db62acSJohn-Mark Gurney.Va kn_fp
10674a603ebSRuslan Ermilovmember initialized to the
10790db62acSJohn-Mark Gurney.Vt "struct file *"
10874a603ebSRuslan Ermilovthat represents the file descriptor.
10990db62acSJohn-Mark Gurney.It Va f_attach
11090db62acSJohn-Mark GurneyThe
11190db62acSJohn-Mark Gurney.Va f_attach
11274a603ebSRuslan Ermilovfunction will be called when attaching a
11390db62acSJohn-Mark Gurney.Vt knote
11490db62acSJohn-Mark Gurneyto the object.
11590db62acSJohn-Mark GurneyThe method should call
11690db62acSJohn-Mark Gurney.Fn knlist_add
11790db62acSJohn-Mark Gurneyto add the
11890db62acSJohn-Mark Gurney.Vt knote
11974a603ebSRuslan Ermilovto the list that was initialized with
12090db62acSJohn-Mark Gurney.Fn knlist_init .
12190db62acSJohn-Mark GurneyThe call to
12290db62acSJohn-Mark Gurney.Fn knlist_add
12374a603ebSRuslan Ermilovis only necessary if the object can have multiple
12474a603ebSRuslan Ermilov.Vt knotes
12574a603ebSRuslan Ermilovassociated with it.
12690db62acSJohn-Mark GurneyIf there is no
12790db62acSJohn-Mark Gurney.Vt knlist
12890db62acSJohn-Mark Gurneyto call
12990db62acSJohn-Mark Gurney.Fn knlist_add
13090db62acSJohn-Mark Gurneywith, the function
13190db62acSJohn-Mark Gurney.Va f_attach
13290db62acSJohn-Mark Gurneymust clear the
13390db62acSJohn-Mark Gurney.Dv KN_DETACHED
13490db62acSJohn-Mark Gurneybit of
13590db62acSJohn-Mark Gurney.Va kn_status
13690db62acSJohn-Mark Gurneyin the
13774a603ebSRuslan Ermilov.Vt knote .
13874a603ebSRuslan ErmilovThe function shall return 0 on success, or appropriate error for the failure.
13974a603ebSRuslan ErmilovDuring
14074a603ebSRuslan Ermilov.Va f_attach ,
14190db62acSJohn-Mark Gurneyit is valid to change the
14290db62acSJohn-Mark Gurney.Va kn_fops
14390db62acSJohn-Mark Gurneypointer to a different pointer.
14490db62acSJohn-Mark GurneyThis will change the
14590db62acSJohn-Mark Gurney.Va f_event
14690db62acSJohn-Mark Gurneyand
14790db62acSJohn-Mark Gurney.Va f_detach
14874a603ebSRuslan Ermilovfunctions called when processing the
14974a603ebSRuslan Ermilov.Vt knote .
15090db62acSJohn-Mark Gurney.It Va f_detach
15190db62acSJohn-Mark GurneyThe
15290db62acSJohn-Mark Gurney.Va f_detach
15374a603ebSRuslan Ermilovfunction will be called to detach the
15490db62acSJohn-Mark Gurney.Vt knote
15590db62acSJohn-Mark Gurneyif the
15690db62acSJohn-Mark Gurney.Vt knote
15790db62acSJohn-Mark Gurneyhas not already been detached by a call to
15890db62acSJohn-Mark Gurney.Fn knlist_remove .
15990db62acSJohn-Mark Gurney.It Va f_event
16090db62acSJohn-Mark GurneyThe
16190db62acSJohn-Mark Gurney.Va f_event
16274a603ebSRuslan Ermilovfunction will be called to update the status of the
16390db62acSJohn-Mark Gurney.Vt knote .
16490db62acSJohn-Mark GurneyIf the function returns 0, it will be assumed that the object is not
16590db62acSJohn-Mark Gurneyready (or no longer ready) to be woken up.
16674a603ebSRuslan ErmilovThe
16774a603ebSRuslan Ermilov.Fa hint
16874a603ebSRuslan Ermilovargument will be 0 when scanning
16974a603ebSRuslan Ermilov.Vt knotes
17074a603ebSRuslan Ermilovto see which are triggered.
17174a603ebSRuslan ErmilovOtherwise, the
17274a603ebSRuslan Ermilov.Fa hint
17374a603ebSRuslan Ermilovargument will be the value passed to either
17490db62acSJohn-Mark Gurney.Dv KNOTE_LOCKED
17590db62acSJohn-Mark Gurneyor
17690db62acSJohn-Mark Gurney.Dv KNOTE_UNLOCKED .
17790db62acSJohn-Mark GurneyThe
17890db62acSJohn-Mark Gurney.Va kn_data
17990db62acSJohn-Mark Gurneyvalue should be updated as necessary to reflect the current value, such as
18090db62acSJohn-Mark Gurneynumber of bytes available for reading, or buffer space available for writing.
18190db62acSJohn-Mark GurneyIf the note needs to be removed,
18290db62acSJohn-Mark Gurney.Fn knlist_remove_inevent
18390db62acSJohn-Mark Gurneymust be called.
18490db62acSJohn-Mark GurneyThe function
18590db62acSJohn-Mark Gurney.Fn knlist_remove_inevent
18690db62acSJohn-Mark Gurneywill remove the note from the list, the
18790db62acSJohn-Mark Gurney.Va f_detach
18874a603ebSRuslan Ermilovfunction will not be called and the
18974a603ebSRuslan Ermilov.Vt knote
19090db62acSJohn-Mark Gurneywill not be returned as an event.
191cd457d4eSJohn-Mark Gurney.Pp
192cd457d4eSJohn-Mark GurneyLocks
193cd457d4eSJohn-Mark Gurney.Em must not
19499be3bc6SJohn-Mark Gurneybe acquired in
195cd457d4eSJohn-Mark Gurney.Va f_event .
196cd457d4eSJohn-Mark GurneyIf a lock is required in
197cd457d4eSJohn-Mark Gurney.Va f_event ,
198cd457d4eSJohn-Mark Gurneyit must be obtained in the
199cd457d4eSJohn-Mark Gurney.Fa kl_lock
200cd457d4eSJohn-Mark Gurneyfunction of the
201cd457d4eSJohn-Mark Gurney.Vt knlist
202cd457d4eSJohn-Mark Gurneythat the
203cd457d4eSJohn-Mark Gurney.Va knote
204cd457d4eSJohn-Mark Gurneywas added to.
20590db62acSJohn-Mark Gurney.El
20690db62acSJohn-Mark Gurney.Pp
20790db62acSJohn-Mark GurneyThe function
20890db62acSJohn-Mark Gurney.Fn kqfd_register
20990db62acSJohn-Mark Gurneywill register the
21090db62acSJohn-Mark Gurney.Vt kevent
21190db62acSJohn-Mark Gurneyon the kqueue file descriptor
21290db62acSJohn-Mark Gurney.Fa fd .
21374a603ebSRuslan ErmilovIf it is safe to sleep,
21474a603ebSRuslan Ermilov.Fa waitok
21574a603ebSRuslan Ermilovshould be set.
21690db62acSJohn-Mark Gurney.Pp
21790db62acSJohn-Mark GurneyThe function
21890db62acSJohn-Mark Gurney.Fn knote_fdclose
21990db62acSJohn-Mark Gurneyis used to delete all
22090db62acSJohn-Mark Gurney.Vt knotes
22190db62acSJohn-Mark Gurneyassociated with
22290db62acSJohn-Mark Gurney.Fa fd .
22374a603ebSRuslan ErmilovOnce returned, there will no longer be any
22490db62acSJohn-Mark Gurney.Vt knotes
22590db62acSJohn-Mark Gurneyassociated with the
22690db62acSJohn-Mark Gurney.Fa fd .
22790db62acSJohn-Mark GurneyThe
22890db62acSJohn-Mark Gurney.Vt knotes
22990db62acSJohn-Mark Gurneyremoved will never be returned from a
23090db62acSJohn-Mark Gurney.Xr kevent 2
23190db62acSJohn-Mark Gurneycall, so if userland uses the
23290db62acSJohn-Mark Gurney.Vt knote
23390db62acSJohn-Mark Gurneyto track resources, they will be leaked.
23490db62acSJohn-Mark GurneyThe
23590db62acSJohn-Mark Gurney.Fn FILEDESC_LOCK
23674a603ebSRuslan Ermilovlock must be held over the call to
23790db62acSJohn-Mark Gurney.Fn knote_fdclose
23890db62acSJohn-Mark Gurneyso that file descriptors cannot be added or removed.
23990db62acSJohn-Mark Gurney.Pp
24090db62acSJohn-Mark GurneyThe
24190db62acSJohn-Mark Gurney.Fn knlist_*
24274a603ebSRuslan Ermilovfamily of functions are for managing
24374a603ebSRuslan Ermilov.Vt knotes
24474a603ebSRuslan Ermilovassociated with an object.
24590db62acSJohn-Mark GurneyA
24674a603ebSRuslan Ermilov.Vt knlist
24790db62acSJohn-Mark Gurneyis not required, but is commonly used.
24890db62acSJohn-Mark GurneyIf used, the
24990db62acSJohn-Mark Gurney.Vt knlist
25074a603ebSRuslan Ermilovmust be initialized with the
25190db62acSJohn-Mark Gurney.Fn knlist_init
25290db62acSJohn-Mark Gurneyfunction.
25390db62acSJohn-Mark GurneyIf
25490db62acSJohn-Mark Gurney.Fa lock
25590db62acSJohn-Mark Gurneyis
25690db62acSJohn-Mark Gurney.Dv NULL ,
25790db62acSJohn-Mark Gurneyan internal lock will be used and the remaining arguments will be ignored.
25890db62acSJohn-Mark GurneyThe
25990db62acSJohn-Mark Gurney.Fa kl_lock , kl_unlock
26090db62acSJohn-Mark Gurneyand
26190db62acSJohn-Mark Gurney.Fa kl_locked
26274a603ebSRuslan Ermilovfunctions will be used to manipulate a
26390db62acSJohn-Mark Gurney.Fa lock .
26490db62acSJohn-Mark GurneyIf the argument is
26590db62acSJohn-Mark Gurney.Dv NULL ,
26674a603ebSRuslan Ermilovdefault routines operating on
26790db62acSJohn-Mark Gurney.Vt "struct mtx *"
26890db62acSJohn-Mark Gurneywill be used.
26990db62acSJohn-Mark GurneyThe
27090db62acSJohn-Mark Gurney.Vt knlist
27174a603ebSRuslan Ermilovstructure may be embedded into the object structure.
27290db62acSJohn-Mark GurneyThe
27390db62acSJohn-Mark Gurney.Fa lock
27490db62acSJohn-Mark Gurneywill be held over calls to
27574a603ebSRuslan Ermilov.Va f_event .
27690db62acSJohn-Mark GurneyIf
27790db62acSJohn-Mark Gurney.Dv NULL
27890db62acSJohn-Mark Gurneyis passed for the mutex, a private mutex will be used.
27990db62acSJohn-Mark GurneyThe function
28090db62acSJohn-Mark Gurney.Fn knlist_empty
28174a603ebSRuslan Ermilovrequires that a
28290db62acSJohn-Mark Gurney.Fa lock
28390db62acSJohn-Mark Gurneybe held.
28490db62acSJohn-Mark GurneyThe function
28590db62acSJohn-Mark Gurney.Fn knlist_clear
28674a603ebSRuslan Ermilovis used to remove all
28774a603ebSRuslan Ermilov.Vt knotes
28874a603ebSRuslan Ermilovassociated with the list.
28990db62acSJohn-Mark GurneyThe
29090db62acSJohn-Mark Gurney.Fa islocked
29174a603ebSRuslan Ermilovargument declares if
29290db62acSJohn-Mark Gurney.Fa lock
29374a603ebSRuslan Ermilovhas been acquired.
29490db62acSJohn-Mark GurneyAll
29590db62acSJohn-Mark Gurney.Vt knotes
29690db62acSJohn-Mark Gurneywill be marked as detached, and
29790db62acSJohn-Mark Gurney.Dv EV_ONESHOT
29890db62acSJohn-Mark Gurneywill be set so that the
29990db62acSJohn-Mark Gurney.Vt knote
30090db62acSJohn-Mark Gurneywill be deleted after the next scan.
30174a603ebSRuslan ErmilovThe
30290db62acSJohn-Mark Gurney.Fn knlist_destroy
30374a603ebSRuslan Ermilovfunction is used to destroy a
30474a603ebSRuslan Ermilov.Vt knlist .
30590db62acSJohn-Mark GurneyThere must be no
30690db62acSJohn-Mark Gurney.Vt knotes
30790db62acSJohn-Mark Gurneyassociated with the
30890db62acSJohn-Mark Gurney.Vt knlist
30974a603ebSRuslan Ermilov.Fn ( knlist_empty
31074a603ebSRuslan Ermilovreturns true)
31174a603ebSRuslan Ermilovand no more
31290db62acSJohn-Mark Gurney.Vt knotes
31374a603ebSRuslan Ermilovmay be attached to the object.
31474a603ebSRuslan ErmilovA
31574a603ebSRuslan Ermilov.Vt knlist
31674a603ebSRuslan Ermilovmay be emptied by calling
31774a603ebSRuslan Ermilov.Fn knlist_clear .
31890db62acSJohn-Mark Gurney.Pp
31974a603ebSRuslan ErmilovThe macros
32090db62acSJohn-Mark Gurney.Fn KNOTE_LOCKED
32190db62acSJohn-Mark Gurneyand
32290db62acSJohn-Mark Gurney.Fn KNOTE_UNLOCKED
32374a603ebSRuslan Ermilovare used to notify
32474a603ebSRuslan Ermilov.Vt knotes
32574a603ebSRuslan Ermilovabout events associated with the object.
32674a603ebSRuslan ErmilovIt will iterate over all
32790db62acSJohn-Mark Gurney.Vt knotes
32890db62acSJohn-Mark Gurneyon the list calling the
32990db62acSJohn-Mark Gurney.Va f_event
33090db62acSJohn-Mark Gurneyfunction associated with the
33190db62acSJohn-Mark Gurney.Vt knote .
33274a603ebSRuslan ErmilovThe macro
33390db62acSJohn-Mark Gurney.Fn KNOTE_LOCKED
33490db62acSJohn-Mark Gurneymust be used if the lock associated with the
33590db62acSJohn-Mark Gurney.Fa knl
33690db62acSJohn-Mark Gurneypassed in is held.
33790db62acSJohn-Mark GurneyThe function
33890db62acSJohn-Mark Gurney.Fn KNOTE_UNLOCKED
33974a603ebSRuslan Ermilovwill acquire the lock before iterating over the list of
34074a603ebSRuslan Ermilov.Vt knotes .
34190db62acSJohn-Mark Gurney.Sh RETURN VALUES
34290db62acSJohn-Mark GurneyThe function
34390db62acSJohn-Mark Gurney.Fn kqueue_add_filteropts
34490db62acSJohn-Mark Gurneywill return zero on success,
34590db62acSJohn-Mark Gurney.Er EINVAL
34690db62acSJohn-Mark Gurneyin the case of an invalid
34774a603ebSRuslan Ermilov.Fa filt ,
34890db62acSJohn-Mark Gurneyor
34990db62acSJohn-Mark Gurney.Er EEXIST
35090db62acSJohn-Mark Gurneyif the filter has already been installed.
35190db62acSJohn-Mark Gurney.Pp
35290db62acSJohn-Mark GurneyThe function
35390db62acSJohn-Mark Gurney.Fn kqueue_del_filteropts
35490db62acSJohn-Mark Gurneywill return zero on success,
35590db62acSJohn-Mark Gurney.Er EINVAL
35690db62acSJohn-Mark Gurneyin the case of an invalid
35774a603ebSRuslan Ermilov.Fa filt ,
35890db62acSJohn-Mark Gurneyor
35990db62acSJohn-Mark Gurney.Er EBUSY
36090db62acSJohn-Mark Gurneyif the filter is still in use.
36190db62acSJohn-Mark Gurney.Pp
36290db62acSJohn-Mark GurneyThe function
36390db62acSJohn-Mark Gurney.Fn kqfd_register
36490db62acSJohn-Mark Gurneywill return zero on success,
36590db62acSJohn-Mark Gurney.Er EBADF
36674a603ebSRuslan Ermilovif the file descriptor is not a kqueue, or any of the possible values returned
36790db62acSJohn-Mark Gurneyby
36874a603ebSRuslan Ermilov.Xr kevent 2 .
36990db62acSJohn-Mark Gurney.Sh SEE ALSO
37074a603ebSRuslan Ermilov.Xr kevent 2 ,
37174a603ebSRuslan Ermilov.Xr kqueue 2
37290db62acSJohn-Mark Gurney.Sh AUTHORS
37390db62acSJohn-Mark GurneyThis
37490db62acSJohn-Mark Gurneymanual page was written by
37590db62acSJohn-Mark Gurney.An John-Mark Gurney Aq jmg@FreeBSD.org .
376