You are right, except that when you expect to receive an EV_EOF (by OR'ing it with either EV_READ or EV_WRITE) you will check for this flag on the callback. In this case, you will be able to detect the EOF without effectively calling read or write.