- NetBSD Manual Pages
SELECT(9) NetBSD Kernel Developer's Manual SELECT(9)
Powered by man-cgi (2021-06-01).
Maintained for NetBSD
by Kimmo Suominen.
Based on man-cgi by Panagiotis Christias.
seldestroy, selinit, selrecord, selnotify -- select and poll subsystem
seldestroy(struct selinfo *sip);
selinit(struct selinfo *sip);
selrecord(struct lwp *selector, struct selinfo *sip);
selnotify(struct selinfo *sip, int events, long knhint);
selinit() and seldestroy() functions must be used to initialize and
destroy the struct selinfo. The seldestroy() function may block.
selrecord() and selnotify() are used by device drivers to coordinate with
the kernel implementation of select(2) and poll(2). Each object that can
be polled contains a selinfo record. Device drivers provide locking for
the selinfo record.
selrecord() records that the calling thread is interested in events
related to a given object. selrecord() should only be called when the
poll routine determines that the object is not ready for I/O: there are
no events of interest pending. The check for pending I/O and call to
selrecord() must be atomic. Atomicity can be provided by holding the
object's lock across the test and call to selrecord(). For non-MPSAFE
drivers, the global kernel_lock is enough to provide atomicity.
selnotify() is called by the underlying object handling code in order to
notify any waiting threads that an event of interest has occurred. The
same lock held across the poll method and call to selrecord() must be
held across the call to selnotify(). The lock prevents an event of
interest being signalled while a thread is in the process of recording
The events indicates which event happen. Zero may be used if unknown.
selnotify() also calls KNOTE() passing knhint as an argument.
The core of the select and poll subsystem implementation is in
sys/kern/sys_select.c. Data structures and function prototypes are
located in sys/sys/select.h, sys/sys/poll.h and sys/sys/selinfo.h.
poll(2), select(2), knote(9)
NetBSD 9.1 May 13, 2008 NetBSD 9.1