/// <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(); } }
/// <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(); } }