AsyncMessenger: a trivial refactory and a fix

No, if errno==EAGAIN, we need to return previous `len` not `r`