Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / ManagedLibraries / Remoting / Channels / IPC / PipeStream.cs / 1305376 / PipeStream.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //========================================================================== // File: PipeStream.cs // // Summary: Stream used for reading from a named pipe // Author: [....]@microsoft.com //========================================================================= using System; using System.IO; using System.Runtime.Remoting; namespace System.Runtime.Remoting.Channels.Ipc { // Basically the same as NetworkStream, but adds support for timeouts. internal sealed class PipeStream : Stream { private IpcPort _port; private int _timeout = 0; // throw timout exception if a read takes longer than this many milliseconds public PipeStream(IpcPort port) { if (port == null) throw new ArgumentNullException("port"); _port = port; } // SocketStream // Stream implementation public override bool CanRead { get { return true; } } public override bool CanSeek { get { return false; } } public override bool CanWrite { get { return true; } } public override long Length { get { throw new NotSupportedException(); } } public override long Position { get { throw new NotSupportedException(); } set { throw new NotSupportedException(); } } // Position public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(); } public override int Read(byte[] buffer, int offset, int size) { if (_timeout <= 0) { return _port.Read(buffer, offset, size); } else { IAsyncResult ar = _port.BeginRead(buffer, offset, size, null, null); if (_timeout>0 && !ar.IsCompleted) { ar.AsyncWaitHandle.WaitOne(_timeout, false); if (!ar.IsCompleted) throw new RemotingTimeoutException(); } return _port.EndRead(ar); } } // Read public override void Write(byte[] buffer, int offset, int count) { _port.Write(buffer, offset, count); } // Write protected override void Dispose(bool disposing) { try { if (disposing) _port.Dispose(); } finally { base.Dispose(disposing); } } public override void Flush() { } public override IAsyncResult BeginRead( byte[] buffer, int offset, int size, AsyncCallback callback, Object state) { IAsyncResult asyncResult = _port.BeginRead( buffer, offset, size, callback, state); return asyncResult; } // BeginRead public override int EndRead(IAsyncResult asyncResult) { return _port.EndRead(asyncResult); } // EndRead public override IAsyncResult BeginWrite( byte[] buffer, int offset, int size, AsyncCallback callback, Object state) { throw new NotSupportedException(); } // BeginWrite public override void EndWrite(IAsyncResult asyncResult) { throw new NotSupportedException(); } // EndWrite public override void SetLength(long value) { throw new NotSupportedException(); } } // class SocketStream } // namespace System.Runtime.Remoting.Channels // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //========================================================================== // File: PipeStream.cs // // Summary: Stream used for reading from a named pipe // Author: [....]@microsoft.com //========================================================================= using System; using System.IO; using System.Runtime.Remoting; namespace System.Runtime.Remoting.Channels.Ipc { // Basically the same as NetworkStream, but adds support for timeouts. internal sealed class PipeStream : Stream { private IpcPort _port; private int _timeout = 0; // throw timout exception if a read takes longer than this many milliseconds public PipeStream(IpcPort port) { if (port == null) throw new ArgumentNullException("port"); _port = port; } // SocketStream // Stream implementation public override bool CanRead { get { return true; } } public override bool CanSeek { get { return false; } } public override bool CanWrite { get { return true; } } public override long Length { get { throw new NotSupportedException(); } } public override long Position { get { throw new NotSupportedException(); } set { throw new NotSupportedException(); } } // Position public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(); } public override int Read(byte[] buffer, int offset, int size) { if (_timeout <= 0) { return _port.Read(buffer, offset, size); } else { IAsyncResult ar = _port.BeginRead(buffer, offset, size, null, null); if (_timeout>0 && !ar.IsCompleted) { ar.AsyncWaitHandle.WaitOne(_timeout, false); if (!ar.IsCompleted) throw new RemotingTimeoutException(); } return _port.EndRead(ar); } } // Read public override void Write(byte[] buffer, int offset, int count) { _port.Write(buffer, offset, count); } // Write protected override void Dispose(bool disposing) { try { if (disposing) _port.Dispose(); } finally { base.Dispose(disposing); } } public override void Flush() { } public override IAsyncResult BeginRead( byte[] buffer, int offset, int size, AsyncCallback callback, Object state) { IAsyncResult asyncResult = _port.BeginRead( buffer, offset, size, callback, state); return asyncResult; } // BeginRead public override int EndRead(IAsyncResult asyncResult) { return _port.EndRead(asyncResult); } // EndRead public override IAsyncResult BeginWrite( byte[] buffer, int offset, int size, AsyncCallback callback, Object state) { throw new NotSupportedException(); } // BeginWrite public override void EndWrite(IAsyncResult asyncResult) { throw new NotSupportedException(); } // EndWrite public override void SetLength(long value) { throw new NotSupportedException(); } } // class SocketStream } // namespace System.Runtime.Remoting.Channels // 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
- TextBox.cs
- XmlSortKeyAccumulator.cs
- MembershipSection.cs
- DataListCommandEventArgs.cs
- ServiceDescriptionData.cs
- ToolStripItem.cs
- DataListDesigner.cs
- HttpListenerException.cs
- QueryStringParameter.cs
- DetailsViewDeleteEventArgs.cs
- NativeMethods.cs
- DocumentSchemaValidator.cs
- PointLight.cs
- MdiWindowListStrip.cs
- RemoteHelper.cs
- WaveHeader.cs
- RequestSecurityTokenResponseCollection.cs
- RemoveFromCollection.cs
- DictionaryItemsCollection.cs
- ContainerUtilities.cs
- TraceSection.cs
- ImageSourceConverter.cs
- ParameterReplacerVisitor.cs
- StatusStrip.cs
- jithelpers.cs
- ValidationHelper.cs
- BaseValidator.cs
- ReferenceAssemblyAttribute.cs
- RoutingConfiguration.cs
- Latin1Encoding.cs
- ModulesEntry.cs
- CrossSiteScriptingValidation.cs
- TextTreeTextBlock.cs
- ConfigXmlCDataSection.cs
- List.cs
- Stackframe.cs
- Type.cs
- ParameterCollectionEditorForm.cs
- ColumnCollectionEditor.cs
- DiscreteKeyFrames.cs
- FixedSOMPage.cs
- TryCatch.cs
- PeerNearMe.cs
- SettingsAttributeDictionary.cs
- Zone.cs
- StoragePropertyMapping.cs
- PermissionListSet.cs
- NullableDoubleSumAggregationOperator.cs
- XmlSerializerNamespaces.cs
- RegexGroup.cs
- ConfigXmlAttribute.cs
- ConnectionPoint.cs
- Policy.cs
- HttpModuleActionCollection.cs
- Image.cs
- DbProviderFactories.cs
- SqlProviderUtilities.cs
- AppDomainAttributes.cs
- KnownAssemblyEntry.cs
- CommandEventArgs.cs
- WindowsListViewItemStartMenu.cs
- PolyLineSegment.cs
- ResourcesGenerator.cs
- XamlParser.cs
- BigInt.cs
- RadioButtonRenderer.cs
- ToolStripTextBox.cs
- SocketAddress.cs
- Rules.cs
- XmlComment.cs
- DefaultTextStore.cs
- ACE.cs
- _ContextAwareResult.cs
- SignatureHelper.cs
- SynchronizedKeyedCollection.cs
- CodeIdentifier.cs
- TypeConverter.cs
- TdsParserSessionPool.cs
- BitmapEffect.cs
- TextRangeSerialization.cs
- NodeFunctions.cs
- TranslateTransform3D.cs
- XamlToRtfParser.cs
- TableSectionStyle.cs
- RequestDescription.cs
- TextServicesProperty.cs
- XmlSchemaSimpleTypeList.cs
- TaiwanLunisolarCalendar.cs
- ReferenceEqualityComparer.cs
- BoundField.cs
- OdbcConnectionStringbuilder.cs
- SerializationHelper.cs
- EnumBuilder.cs
- ListDictionary.cs
- UniqueConstraint.cs
- SchemaImporter.cs
- XmlEntityReference.cs
- MimePart.cs
- HttpListenerResponse.cs
- XsltContext.cs