internal void PerformConnect()
        {
            // ensure we're bound to socket
            Start();

            m_connectRequested = false;

            if (m_serverConnection != null)
            {
                m_serverConnection.Disconnect("New connect", 0, m_serverConnection.Status == NetConnectionStatus.Connected, true);
                if (m_serverConnection.RemoteEndpoint.Equals(m_connectEndpoint))
                {
                    m_serverConnection = new NetConnection(this, m_connectEndpoint, m_localHailData, null, null, 0);
                }
            }
            else
            {
                m_serverConnection = new NetConnection(this, m_connectEndpoint, m_localHailData, null, null, 0);
            }

            // connect
            m_serverConnection.Connect();

            m_connectEndpoint = NetworkEndPoint.unassigned;
            m_localHailData   = null;
        }