public void CloseSocket(AsyncSocketUserToken userToken) { if (userToken.ConnectSocket == null) { return; } string socketInfo = string.Format("Local Address: {0} Remote Address: {1}", userToken.ConnectSocket.LocalEndPoint, userToken.SendEventArgs.RemoteEndPoint); App.Logger.Info("Connection disconnected. {0}", socketInfo); try { userToken.ConnectSocket.Shutdown(SocketShutdown.Both); } catch (Exception E) { App.Logger.Info("CloseSocket Disconnect {0} error, message: {1}", socketInfo, E.Message); } userToken.ConnectSocket.Close(); userToken.ConnectSocket = null; //释放引用,并清理缓存,包括释放协议对象等资源 userToken.TokenClose(); MaxNumberAccepted.Release(); AsyncSocketUserTokenPool.Push(userToken); AsyncSocketUserTokenList.Remove(userToken); }