Even if it just did the naive thing of "disk files are always readable and writable, always", my code would work, and it'd unregister the disk file from the epoll when the work was done.
But NOOO. Now I have to spawn a fucking thread. And because I have to spawn a thread I have to only use async-signal-safe functions after a fork because the memory manager might be locked up. Nice