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
- BoundColumn.cs
- securestring.cs
- AsyncContentLoadedEventArgs.cs
- AnnotationAuthorChangedEventArgs.cs
- DataSourceCache.cs
- DebuggerAttributes.cs
- HashMembershipCondition.cs
- SamlSecurityToken.cs
- Descriptor.cs
- DispatcherObject.cs
- SizeAnimationBase.cs
- DataListCommandEventArgs.cs
- ParallelQuery.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- ProfileService.cs
- WorkflowViewStateService.cs
- PermissionToken.cs
- ValueUtilsSmi.cs
- DataControlImageButton.cs
- MobileListItem.cs
- InvalidEnumArgumentException.cs
- BooleanConverter.cs
- ValidationResult.cs
- DesignerListAdapter.cs
- DrawingGroupDrawingContext.cs
- DataRow.cs
- TextSelectionProcessor.cs
- DesignerSerializationOptionsAttribute.cs
- PerformanceCounterPermissionEntryCollection.cs
- GeneralTransform2DTo3DTo2D.cs
- Model3D.cs
- Base64Encoding.cs
- DataView.cs
- LicenseManager.cs
- TypeForwardedToAttribute.cs
- AppDomainAttributes.cs
- DesignerSerializationManager.cs
- MasterPage.cs
- ReaderContextStackData.cs
- QilTypeChecker.cs
- ProviderMetadataCachedInformation.cs
- TemplateEditingVerb.cs
- CodeGenHelper.cs
- XPathDescendantIterator.cs
- PrintDialog.cs
- Receive.cs
- FontSizeConverter.cs
- ColumnMap.cs
- DataSourceViewSchemaConverter.cs
- ScriptResourceInfo.cs
- StreamResourceInfo.cs
- ColumnClickEvent.cs
- HttpRawResponse.cs
- Function.cs
- Peer.cs
- MemberAssignment.cs
- StorageComplexTypeMapping.cs
- WizardStepBase.cs
- DataException.cs
- ListSourceHelper.cs
- CodeTypeReferenceCollection.cs
- IdnMapping.cs
- WindowsGraphics.cs
- HttpStreamXmlDictionaryWriter.cs
- IgnoreFileBuildProvider.cs
- CodeMethodReturnStatement.cs
- PropertyGridCommands.cs
- Util.cs
- C14NUtil.cs
- RuntimeHandles.cs
- WebPartVerbCollection.cs
- XmlSchemaAttributeGroup.cs
- HwndAppCommandInputProvider.cs
- XmlAttributeOverrides.cs
- WSUtilitySpecificationVersion.cs
- PackageStore.cs
- DependencyObjectType.cs
- Dictionary.cs
- Filter.cs
- regiisutil.cs
- BoundsDrawingContextWalker.cs
- HtmlFormParameterReader.cs
- TreeNodeStyleCollection.cs
- XmlBinaryReader.cs
- CompilerInfo.cs
- Normalization.cs
- DelegatingConfigHost.cs
- WinFormsUtils.cs
- SerializationException.cs
- EngineSite.cs
- TranslateTransform3D.cs
- HttpWebRequest.cs
- httpstaticobjectscollection.cs
- EventMappingSettingsCollection.cs
- altserialization.cs
- SafeFileMapViewHandle.cs
- WpfPayload.cs
- InArgumentConverter.cs
- RectangleHotSpot.cs
- Matrix3DConverter.cs