...but not it's obvious - we can't assume each packet nicely encapsulates a single stage, it might all arrive in one go. So the current "recv" implementation can't work. d'oh!