Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Net / System / Net / Sockets / _TransmitFileOverlappedAsyncResult.cs / 1 / _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. //------------------------------------------------------------------------------ //// 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
- TcpTransportElement.cs
- XmlCountingReader.cs
- ExpressionBuilderContext.cs
- PropertyItem.cs
- MutexSecurity.cs
- FileRecordSequence.cs
- DrawingGroupDrawingContext.cs
- WebPartCatalogAddVerb.cs
- DataTableMappingCollection.cs
- EnvelopedSignatureTransform.cs
- WindowsSysHeader.cs
- MulticastNotSupportedException.cs
- CancellationHandlerDesigner.cs
- ChangeBlockUndoRecord.cs
- DeviceContext2.cs
- XmlSchemaParticle.cs
- StringComparer.cs
- HostProtectionException.cs
- XmlWrappingReader.cs
- ContentControl.cs
- InfoCardTrace.cs
- EntitySqlQueryBuilder.cs
- SQLChars.cs
- FrameworkElement.cs
- CmsInterop.cs
- ExpressionVisitor.cs
- QilPatternFactory.cs
- NetworkCredential.cs
- PenContext.cs
- DateRangeEvent.cs
- DataGridViewCellCollection.cs
- ParenthesizePropertyNameAttribute.cs
- OracleNumber.cs
- WindowsToolbarAsMenu.cs
- TrustLevelCollection.cs
- HandlerMappingMemo.cs
- LightweightEntityWrapper.cs
- XsltCompileContext.cs
- XmlUtil.cs
- X509CertificateCollection.cs
- HandledMouseEvent.cs
- EdmRelationshipRoleAttribute.cs
- MessageHeaderT.cs
- HttpCapabilitiesEvaluator.cs
- ProcessInfo.cs
- AddInToken.cs
- DBCommand.cs
- Sql8ConformanceChecker.cs
- InvokeProviderWrapper.cs
- XmlNodeComparer.cs
- Adorner.cs
- TextRange.cs
- RootBrowserWindow.cs
- AnnotationMap.cs
- XmlSchemaDocumentation.cs
- ProviderIncompatibleException.cs
- MetabaseSettingsIis7.cs
- EntityDataSourceColumn.cs
- SQLGuid.cs
- MailAddressCollection.cs
- IUnknownConstantAttribute.cs
- PropertyRef.cs
- IssuanceLicense.cs
- JpegBitmapDecoder.cs
- ComplexTypeEmitter.cs
- CodeSubDirectoriesCollection.cs
- COM2TypeInfoProcessor.cs
- FlowDocumentReaderAutomationPeer.cs
- XmlC14NWriter.cs
- ImageSourceValueSerializer.cs
- MappingException.cs
- WmlValidationSummaryAdapter.cs
- TypeConverterHelper.cs
- ToolStripSplitStackLayout.cs
- _Semaphore.cs
- WindowsIdentity.cs
- SubpageParagraph.cs
- StorageScalarPropertyMapping.cs
- TableLayoutStyle.cs
- RemoteWebConfigurationHostStream.cs
- ScrollItemPattern.cs
- StatusBar.cs
- HttpStreams.cs
- PointAnimationUsingKeyFrames.cs
- TextTrailingCharacterEllipsis.cs
- ComAdminInterfaces.cs
- UrlMappingsModule.cs
- HtmlElement.cs
- UTF7Encoding.cs
- StructuredTypeEmitter.cs
- PrivateFontCollection.cs
- LoadRetryAsyncResult.cs
- AlphabeticalEnumConverter.cs
- CheckBoxField.cs
- XmlSchemaCollection.cs
- MultiBindingExpression.cs
- LogSwitch.cs
- EnterpriseServicesHelper.cs
- CharacterMetricsDictionary.cs
- SamlAuthorizationDecisionStatement.cs