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(); }
private void BeginReceive() { if (IsConnected) { Buffers.Buffer buffer = (Buffers.Buffer)ReceiveBufferPool.Pop(); buffer.UserToken = this; try { buffer.AsyncFrom(mReceiveEventArgs, mSocket); } catch (Exception e_) { buffer.Free(); DisConnect(); ProcessError(e_, "client begin network receive error!"); } } }
internal unsafe void ReciveInternal() { RioBufferSegment buf; if (ReceiveBufferPool.TryGetBuffer(out buf)) { if (!RioStatic.Receive(_requestQueue, buf.SegmentPointer, 1, RIO_RECEIVE_FLAGS.NONE, buf.Index)) { WinSock.ThrowLastWSAError(); } } else { ThreadPool.QueueUserWorkItem(o => { var b = ReceiveBufferPool.GetBuffer(); if (!RioStatic.Receive(_requestQueue, ReceiveBufferPool.GetBuffer().SegmentPointer, 1, RIO_RECEIVE_FLAGS.NONE, b.Index)) { WinSock.ThrowLastWSAError(); } }, null); } }
public RioBufferSegment BeginReceive() { Debug.Assert(inUse); return(BeginReceive(ReceiveBufferPool.GetBuffer())); }