//关闭客户端 void CloseClientSocketEx(SocketAsyncEventArgs e, SocketColseType colseType) { AsyncUserToken token = e.UserToken as AsyncUserToken; if (token != null) { if (token.Socket != null && token.Socket.Connected) { token.Socket.Shutdown(SocketShutdown.Both); token.Socket.Close(); } } onSocketClose(token.ConnId, colseType); semaphore.Release(); lock (m_pool) { if (m_pool.Count < m_maxConnectNum) { e.UserToken = new AsyncUserToken(); m_pool.Push(e); } } }
/// <summary> /// socket关闭 /// </summary> /// <param name="token"></param> private static void Socket_SocketClose(Guid connId, SocketColseType colseType) { dic_UserInfo.TryRemove(connId, out UserInfo tk); }
/// <summary> /// 连接关闭 /// </summary> void onSocketClose(Guid connId, SocketColseType colseType) { dicSocketEventArgs.TryRemove(connId, out UserSocketEventArgs userSocket); SocketClose?.Invoke(connId, colseType); }