When making a TCP connection, readyState returns 'opening' while resolving
the host. However between the resolving period and the establishing a
connection period, it would return 'closed'. This fixes it.
This change also ensures that the socket is closed before the 'end' event is
emitted in the case that the socket was previously shutdown.