They look very similar so that makes sense, just curious on the order of events.
Also I tried using libxev for a project of mine and found it really broke the zig way of doing things. All these callbacks needed to return disarm/rearm instead of error unions so I had to catch every single error instead of being able to use try.
I could have reworked it further to make try work but found the entire thing very verbose and difficult to use with 6 params for all the callback functions.
Thankfully my use case was such that poll() was more than sufficient and that is part of zigs posix namespace so that was what I went with.