I think bmaurer is right about the example: When the 56k socket is blocked, you want to stop reading from the 1gps socket until the 56k socket is writing again. But you want to get informed about EOF on the 1g socket.

At the very least, we _do_ need a clear migration path here.  I want us to eventually accept EV_EOF without EV_READ, even if we can't do that right now. We need to think how we can make that work for programmers who want to share code between implementations that have EV_FEATURE_EARLY_EOF and implementations that don't.