Exemplo n.º 1
0
        private unsafe void QueueSend(IByteBuffer buffer,
                                      IPEndPoint remoteEndPoint,
                                      Action <Udp, Exception> completion)
        {
            if (buffer is null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.buffer);
            }
            if (remoteEndPoint is null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.remoteEndPoint);
            }

            WriteRequest request = Loop.SendRequestPool.Take();

            try
            {
                request.Prepare(buffer,
                                (sendRequest, exception) => completion?.Invoke(this, exception));

                NativeMethods.UdpSend(
                    request.InternalHandle,
                    InternalHandle,
                    remoteEndPoint,
                    request.Bufs,
                    ref request.Size);
            }
            catch (Exception exception)
            {
                request.Release();
                Log.Handle_faulted(HandleType, exception);
                throw;
            }
        }
Exemplo n.º 2
0
 void FinishWrite(WriteRequest writeRequest)
 {
     try
     {
         if (writeRequest.Error != null)
         {
             ChannelOutboundBuffer input = this.OutboundBuffer;
             input?.FailFlushed(writeRequest.Error, true);
             this.Channel.Pipeline.FireExceptionCaught(writeRequest.Error);
         }
     }
     finally
     {
         writeRequest.Release();
     }
 }
Exemplo n.º 3
0
        internal void QueueWrite(IByteBuffer bufferRef, StreamHandle sendHandle, Action <StreamHandle, Exception> completion)
        {
            Debug.Assert(bufferRef is object && sendHandle is object);

            WriteRequest request = Loop.WriteRequestPool.Take();

            try
            {
                request.Prepare(bufferRef,
                                (writeRequest, exception) => completion?.Invoke(_streamHandle, exception));

                _streamHandle.WriteStream(request, sendHandle);
            }
            catch (Exception exception)
            {
                Log.Pipeline_Handle_faulted(_streamHandle.HandleType, exception);
                request.Release();
                throw;
            }
        }