Suppose a server uses edge-triggered epoll. A socket receives 8 KB of data, but the handler reads only 1 KB before returning to epoll_wait().
The remaining 7 KB may never trigger another notification because the socket never became unreadable.
This highlights two important distinctions:
With edge-triggered readiness, a handler should usually keep reading until the operation would block again.
These distinctions determine when to perform I/O and when it is safe to wait for another event.
This chapter compares readiness with completion and level-triggered with edge-triggered notification, explaining drain loops, EAGAIN, one-shot events, EOF, errors, and the obligations each model places on handlers.