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
- TextBoxRenderer.cs
- PkcsUtils.cs
- SQLSingle.cs
- WebPartMinimizeVerb.cs
- XsltSettings.cs
- smtppermission.cs
- ExtendedPropertyInfo.cs
- MSAANativeProvider.cs
- SqlBooleanizer.cs
- WebPartActionVerb.cs
- DataGridViewButtonCell.cs
- RegularExpressionValidator.cs
- CacheDependency.cs
- NegationPusher.cs
- ScriptControl.cs
- DbConnectionStringCommon.cs
- XmlSchemaExporter.cs
- DesignBinding.cs
- Pointer.cs
- SymLanguageType.cs
- TextModifier.cs
- SchemaEntity.cs
- CodeVariableDeclarationStatement.cs
- DataTemplateSelector.cs
- ProviderIncompatibleException.cs
- StartUpEventArgs.cs
- PluggableProtocol.cs
- SqlCommand.cs
- XmlSerializationWriter.cs
- WebUtil.cs
- securitycriticaldata.cs
- CodeDirectiveCollection.cs
- __ConsoleStream.cs
- AccessDataSource.cs
- ObjectPersistData.cs
- SafeCryptHandles.cs
- FixedTextPointer.cs
- ToolStripControlHost.cs
- Animatable.cs
- TreeViewItemAutomationPeer.cs
- ChineseLunisolarCalendar.cs
- GestureRecognitionResult.cs
- PlatformCulture.cs
- RawAppCommandInputReport.cs
- QueueException.cs
- SelectionItemProviderWrapper.cs
- XamlVector3DCollectionSerializer.cs
- X509ServiceCertificateAuthentication.cs
- smtppermission.cs
- NetSectionGroup.cs
- FilteredDataSetHelper.cs
- TextDecorationLocationValidation.cs
- XamlFigureLengthSerializer.cs
- exports.cs
- PermissionSet.cs
- DefaultValidator.cs
- LoginCancelEventArgs.cs
- DefaultValueConverter.cs
- SqlEnums.cs
- Camera.cs
- OleAutBinder.cs
- IListConverters.cs
- COM2IProvidePropertyBuilderHandler.cs
- ViewManager.cs
- ControlTemplate.cs
- SimpleHandlerBuildProvider.cs
- MatrixIndependentAnimationStorage.cs
- KeyValueConfigurationElement.cs
- CriticalFinalizerObject.cs
- MailAddressCollection.cs
- CodeBinaryOperatorExpression.cs
- DataAccessException.cs
- Transform.cs
- DefaultValueMapping.cs
- CrossContextChannel.cs
- EntityClassGenerator.cs
- ImageListStreamer.cs
- SmiTypedGetterSetter.cs
- PropertyConverter.cs
- ImageBrush.cs
- Expr.cs
- InfoCardRSACryptoProvider.cs
- ColorTransform.cs
- EntitySet.cs
- FileReader.cs
- JsonWriterDelegator.cs
- ToolboxComponentsCreatingEventArgs.cs
- RestHandlerFactory.cs
- QilInvokeEarlyBound.cs
- SrgsSubset.cs
- XmlDictionaryString.cs
- Update.cs
- CodeAssignStatement.cs
- MatrixAnimationUsingPath.cs
- DeadCharTextComposition.cs
- ResumeStoryboard.cs
- PointAnimation.cs
- DetailsViewInsertEventArgs.cs
- xsdvalidator.cs
- XPathQueryGenerator.cs