SELECT(9)

πŸ“¦ version 11.0, in nixpkgs unstable

🌸 NAME 🌸

okay bestie, welcome to SELECT(9) from the Kernel Developer's Manual β€” this one is all about the select and poll subsystem. The stars are seldestroy, selinit, selrecord, and selnotify, and they are literally the whole vibe. πŸ’…

✨ SYNOPSIS ✨

copy these exactly, no cap:

#include <sys/param.h>
#include <sys/select.h>

void
seldestroy(struct selinfo *sip);

void
selinit(struct selinfo *sip);

void
selrecord(struct lwp *selector, struct selinfo *sip);

void
selnotify(struct selinfo *sip, int events, long knhint);

πŸ’… DESCRIPTION πŸ’…

okay so first up, selinit() and seldestroy() are the functions you must use to initialize and destroy the struct selinfo. And bestie, listen: seldestroy() may block. Not me warning you about a destructor being sleepy 😭.

⚠️ fr fr: seldestroy() may block.

selrecord() and selnotify() are the device-driver besties that coordinate with the kernel implementation of select(2) and poll(2). Each object that can be polled contains a selinfo record, and device drivers provide locking for that selinfo record.

selrecord() records that the calling thread is interested in events related to a given object. It should only be called when the poll routine determines that the object is not ready for I/O β€” like, there are no events of interest pending. The check for pending I/O and the 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. slay.

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 its interest. iconic behaviour, honestly.

The events indicates which event happen. Zero may be used if unknown.

selnotify() also calls KNOTE() passing knhint as an argument. cute.

πŸ”₯ CODE REFERENCES πŸ”₯

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. go read them, iykyk. πŸ“š

πŸ¦‹ SEE ALSO πŸ¦‹


πŸ’Œ cute sign-off: this page comes from Debian, it's the SELECT(9) manual, and it's dated May 13, 2008 β€” periodt, bestie πŸ«ΆπŸ’–

πŸ“¦ where this page comes from