Use the non-throwing remote_endpoint() function

This finally fixes all those stupid issues with multiple clients
disconnecting at the same time.
Unify formatting of log/error messages.
Improve wording in an error message.
Add back the exception handling around the boost::asio::write();

As it turns out, this is actually necessary.