When a program creates an I/O event, the creation call activates the event—that is, it requests notification from the operating system when the corresponding I/O situation occurs. When the specified condition occurs, Rendezvous software
deactivates the event, and places the event object on its event queue. When the callback function returns, Rendezvous software automatically
reactivates the event. In this way, only one reference to the I/O event can appear in a queue at any moment in time. (References to several I/O events can appear simultaneously, but two references to the same event cannot appear at the same time.)
Figure 11 illustrates that Rendezvous software temporarily deactivates the I/O event from the time it enters the queue until its callback function returns.
I/O events trigger when the operating system reports that an I/O condition on a monitored socket would succeed (transfer at least one byte without blocking).
For example, write events depend on the state of the socket—it must be write-available. That is, on each pass through the event driver’s loop, the socket can accept one or more bytes.
Rendezvous software cannot guarantee that a subsequent I/O call will not block.
I/O conditions are not necessarily static. Event stealing or
write overload can change the I/O condition before the callback function runs.