async: robustness for ClientServer module

- If the socket closes, we also close the pipes carrying parsed messages
- Evaluate getpeername eagerly. It will throw an exception if applied to
  a closed socket. (!!!)
- Ignore errors signalled by a handler (default behavior is to stop listening).
  In the future, we might want to print an error instead, but stop-listening is
  sort of ridiculous.