ircd/api/events
Overview
The IRC server is built around an event loop. Until the u2.10.11 release (which is what ircd-darenet 1.x is based off of), this event loop has been rather ad-hoc; timed events are hard-coded in, signals are handled inside the signal handler, etc. All of this changed with u2.10.11. A new subsystem, the events subsystem, was introduced; the new subsystem contains a generalization of the concept of an event. An event is a signal, the expiration of a timer, or some form of activity on a network socket. This new subsystem has the potential to vastly simplify the code that is arguably the core of any network program, and makes it much simpler to support more exotic forms of network activity monitoring than the conventional select() and poll() calls.
The primary concepts that the events subsystem works with are the "event," represented by a struct Event
, and the "generator." There are three types of generators: sockets, represented by a struct Socket
; signals, represented by a struct Signal
; and timers, represented by struct Timer
. Each of these generators will be described in turn.