If we're blocking in-line, wouldn't it be easier/safer to create our temporary SimpleMessenger/Dispatcher via scoped pointers, or maybe even on the stack or something?
You're leaking on the ETIMEDOUT return here, and so will the next person to add a return statement...