private void CloseClientSocket(SocketAsyncEventArgs e)
        {
            AsyncUserToken token = (AsyncUserToken)e.UserToken;

            if (token.Socket == null)
            {
                return;
            }

            try
            {
                token.Socket.Shutdown(SocketShutdown.Send);
            }
            catch (Exception) { }
            token.Socket.Close();
            token.Socket = null;

            m_eventHandlers.OnUserDisconnect(token);

            Interlocked.Decrement(ref m_currentlyConnectedUsers);

            m_userTokens.ReleaseObject(token);

            m_maxClientsAccepted.Release();
        }
Beispiel #2
0
 public void OnUserDisconnect(AsyncUserToken userToken)
 {
     m_queue.AddEvent(new EventQueueEntry
     {
         userToken = userToken,
         runnable  = () => m_innerEventHandlingContainer.OnUserDisconnect(userToken)
     });
 }