This way, TCPSocketHandler only deal with the message sending/receiving, not
the connect() or anything else. This will be used for implementing servers
(because when a client is accepted, we don’t need all the connect() and dns
resolution stuff).
Because c-ares may close one of its socket, even if it’s not the one that
has the event. Otherwise we may not know when a socket has been removed from
our poller (automatically, when close()ed) and this leads to bugs.