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