net: make Socket destroy() re-entrance safe

So that we are free to call socket.destroy() in error event handler.
Otherwise, we'll get server.getConnections() == -1.