Add virtual dtor.
Don't worry, it's deleted via shared_ptr magic.
Run socket ops on a strand.
Elaborate self-destruction comment.
Add logging output in write_datagram().