Theoretically `alloc_cb` calls come right before `read_cb`, but this could not be the case on Windows. I have never seen this happen in pyuv (I use a statically allocated fixed size buffer for everything, but it could be the Python GIL helping me here). You should be ready to handle `alloc_cb`, `alloc_cb`, `read_cb`, `read_cb`.