Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / Sockets / _TransmitFileOverlappedAsyncResult.cs / 1305376 / _TransmitFileOverlappedAsyncResult.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net.Sockets { using System; using System.Net; using System.IO; using System.Runtime.InteropServices; using System.Threading; using Microsoft.Win32; // // OverlappedAsyncResult - used to take care of storage for async Socket operation // from the BeginSend, BeginSendTo, BeginReceive, BeginReceiveFrom calls. // internal class TransmitFileOverlappedAsyncResult : BaseOverlappedAsyncResult { // // internal class members // private FileStream m_fileStream; private TransmitFileOptions m_flags; private TransmitFileBuffers m_buffers; // Constructor. We take in the socket that's creating us, the caller's // state object, and the buffer on which the I/O will be performed. // We save the socket and state, pin the callers's buffer, and allocate // an event for the WaitHandle. // internal TransmitFileOverlappedAsyncResult(Socket socket, Object asyncState, AsyncCallback asyncCallback) : base(socket, asyncState, asyncCallback) { } internal TransmitFileOverlappedAsyncResult(Socket socket):base(socket){ } // // SetUnmanagedStructures - // Fills in Overlapped Structures used in an Async Overlapped Winsock call // these calls are outside the runtime and are unmanaged code, so we need // to prepare specific structures and ints that lie in unmanaged memory // since the Overlapped calls can be Async // internal void SetUnmanagedStructures(byte[] preBuffer, byte[] postBuffer, FileStream fileStream, TransmitFileOptions flags, bool [....]) { // // fill in flags if we use it. // m_fileStream = fileStream; m_flags = flags; // // Fill in Buffer Array structure that will be used for our send/recv Buffer // m_buffers = null; int buffsNumber = 0; if (preBuffer != null && preBuffer.Length>0) ++buffsNumber; if (postBuffer != null && postBuffer.Length>0) ++buffsNumber; object[] objectsToPin = null; if (buffsNumber != 0) { ++buffsNumber; objectsToPin = new object[buffsNumber]; m_buffers = new TransmitFileBuffers(); objectsToPin[--buffsNumber] = m_buffers; if (preBuffer != null && preBuffer.Length>0) { m_buffers.preBufferLength = preBuffer.Length; objectsToPin[--buffsNumber] = preBuffer; } if (postBuffer != null && postBuffer.Length>0) { m_buffers.postBufferLength = postBuffer.Length; objectsToPin[--buffsNumber] = postBuffer; } if ([....]) { base.PinUnmanagedObjects(objectsToPin); } else { base.SetUnmanagedStructures(objectsToPin); } if (preBuffer != null && preBuffer.Length > 0) { m_buffers.preBuffer = Marshal.UnsafeAddrOfPinnedArrayElement(preBuffer, 0); } if (postBuffer != null && postBuffer.Length > 0) { m_buffers.postBuffer = Marshal.UnsafeAddrOfPinnedArrayElement(postBuffer, 0); } } else if (![....]) { base.SetUnmanagedStructures(null); } } // SetUnmanagedStructures() internal void SetUnmanagedStructures(byte[] preBuffer, byte[] postBuffer, FileStream fileStream, TransmitFileOptions flags, ref OverlappedCache overlappedCache) { SetupCache(ref overlappedCache); SetUnmanagedStructures(preBuffer, postBuffer, fileStream, flags, false); } // Utility cleanup routine. Frees pinned and unmanged memory. // protected override void ForceReleaseUnmanagedStructures() { if (m_fileStream != null ) { m_fileStream.Close(); m_fileStream = null; } // // clenaup base class // base.ForceReleaseUnmanagedStructures(); } // CleanupUnmanagedStructures() internal void SyncReleaseUnmanagedStructures() { ForceReleaseUnmanagedStructures(); } internal TransmitFileBuffers TransmitFileBuffers{ get{ return m_buffers; } } internal TransmitFileOptions Flags{ get{ return m_flags; } } }; // class OverlappedAsyncResult } // namespace System.Net.Sockets // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlSchemaValidationException.cs
- OdbcConnectionPoolProviderInfo.cs
- DesignerWithHeader.cs
- AstTree.cs
- KeyNotFoundException.cs
- TextSpanModifier.cs
- Label.cs
- LineInfo.cs
- RadioButton.cs
- TileModeValidation.cs
- WindowsRichEdit.cs
- InitializerFacet.cs
- DbFunctionCommandTree.cs
- CmsUtils.cs
- ScaleTransform3D.cs
- FigureHelper.cs
- xmlglyphRunInfo.cs
- SpellerError.cs
- CursorConverter.cs
- TextDecoration.cs
- EmptyEnumerator.cs
- Win32.cs
- RecordsAffectedEventArgs.cs
- Pool.cs
- LoginName.cs
- DbgCompiler.cs
- UnicodeEncoding.cs
- LaxModeSecurityHeaderElementInferenceEngine.cs
- ToolStripInSituService.cs
- NativeActivityFaultContext.cs
- SystemColors.cs
- updatecommandorderer.cs
- OutOfMemoryException.cs
- StorageEntitySetMapping.cs
- ProtocolViolationException.cs
- MetadataException.cs
- UpdateEventArgs.cs
- HttpRequestCacheValidator.cs
- ResourceType.cs
- ErrorFormatterPage.cs
- DecoderExceptionFallback.cs
- FontEditor.cs
- GridViewDeletedEventArgs.cs
- DispatcherProcessingDisabled.cs
- OleDbConnectionInternal.cs
- ClientType.cs
- MeasurementDCInfo.cs
- JulianCalendar.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- IssuanceLicense.cs
- DataGridTablesFactory.cs
- Html32TextWriter.cs
- SizeConverter.cs
- ReferenceConverter.cs
- MimeTypeAttribute.cs
- BitVector32.cs
- DomainUpDown.cs
- HttpCapabilitiesBase.cs
- FillErrorEventArgs.cs
- SqlDelegatedTransaction.cs
- SystemIPv6InterfaceProperties.cs
- ImageFormat.cs
- TrustSection.cs
- MaskDesignerDialog.cs
- XPathNavigatorReader.cs
- StyleHelper.cs
- TriState.cs
- AnnotationAuthorChangedEventArgs.cs
- DrawTreeNodeEventArgs.cs
- RotateTransform3D.cs
- XhtmlBasicValidationSummaryAdapter.cs
- MainMenu.cs
- BaseCodePageEncoding.cs
- AbstractDataSvcMapFileLoader.cs
- InsufficientMemoryException.cs
- GZipStream.cs
- PolygonHotSpot.cs
- RuntimeHandles.cs
- WebPartConnectionsConfigureVerb.cs
- DateTimeParse.cs
- CustomDictionarySources.cs
- XmlSerializationGeneratedCode.cs
- HealthMonitoringSection.cs
- PropertyMetadata.cs
- SqlUserDefinedTypeAttribute.cs
- ResXBuildProvider.cs
- ObjectReaderCompiler.cs
- precedingquery.cs
- HybridObjectCache.cs
- ListViewCommandEventArgs.cs
- SymDocumentType.cs
- DataGridViewSelectedRowCollection.cs
- Stackframe.cs
- ProtocolsConfigurationHandler.cs
- DbParameterHelper.cs
- WebPartActionVerb.cs
- ItemCheckEvent.cs
- StaticSiteMapProvider.cs
- RayHitTestParameters.cs
- DoubleAnimationBase.cs