Example #1
0
        /// <summary>
        /// Ends send operation.
        /// </summary>
        /// <param name="bytesTransferred">the bytes transferred in last send operation</param>
        protected void EndSend(Int32 bytesTransferred)
        {
            this.IncreaseWrittenBytes(bytesTransferred, DateTime.Now);

            IWriteRequest req = CurrentWriteRequest;

            if (req != null)
            {
                IoBuffer buf = req.Message as IoBuffer;
                if (buf == null)
                {
                    IFileRegion file = req.Message as IFileRegion;
                    if (file != null)
                    {
                        FireMessageSent(req);
                    }
                    else
                    {
                        // we only send buffers and files so technically it shouldn't happen
                    }
                }
                else if (!buf.HasRemaining)
                {
                    // Buffer has been sent, clear the current request.
                    Int32 pos = buf.Position;
                    buf.Reset();

                    FireMessageSent(req);

                    // And set it back to its position
                    buf.Position = pos;

                    buf.Free();
                }
            }

            if (Socket.Connected)
            {
                BeginSend();
            }
        }
Example #2
0
        /// <summary>
        /// Ends send operation.
        /// </summary>
        /// <param name="ex">the exception caught</param>
        /// <param name="discardWriteRequest">discard the current write quest or not</param>
        protected void EndSend(Exception ex, Boolean discardWriteRequest)
        {
            IWriteRequest req = CurrentWriteRequest;

            if (req != null)
            {
                req.Future.Exception = ex;
                if (discardWriteRequest)
                {
                    CurrentWriteRequest = null;
                    IoBuffer buf = req.Message as IoBuffer;
                    if (buf != null)
                    {
                        buf.Free();
                    }
                }
            }
            this.FilterChain.FireExceptionCaught(ex);
            if (Socket.Connected)
            {
                BeginSend();
            }
        }