public virtual void Dispose() { RioStatic.DeregisterBuffer(_sendBufferId); RioStatic.DeregisterBuffer(_reciveBufferId); Kernel32.CloseHandle(SendCompletionPort); Kernel32.CloseHandle(ReceiveCompletionPort); RioStatic.CloseCompletionQueue(SendCompletionQueue); RioStatic.CloseCompletionQueue(ReceiveCompletionQueue); WinSock.WSACleanup(); SendBufferPool.Dispose(); ReceiveBufferPool.Dispose(); }
public void Shutdown() { if (Interlocked.Exchange(ref _state, _disposed) == _disposed) { return; } try { _listener.Dispose(); _listener = null; Task.Factory.StartNew(async() => { try { foreach (var session in _sessions.Values) { await session.Close(); } } catch (Exception ex) when(!ShouldThrow(ex)) { } }, TaskCreationOptions.PreferFairness) .Wait(); _sendPool.Dispose(); _receivePool.Dispose(); _sendPool = null; _receivePool = null; } catch (Exception ex) when(!ShouldThrow(ex)) { } }