Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / ManagedLibraries / Remoting / Channels / IPC / PortCache.cs / 1305376 / PortCache.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //============================================================================ // File: PortCache.cs // Author: [....]@Microsoft.Com // Summary: Implements a cache for port handles // //========================================================================= using System; using System.Collections; using System.Threading; using System.Security.Principal; namespace System.Runtime.Remoting.Channels.Ipc { internal class PortConnection { private IpcPort _port; private DateTime _socketLastUsed; internal PortConnection(IpcPort port) { _port = port; _socketLastUsed = DateTime.Now; } internal IpcPort Port { get { return _port; } } internal DateTime LastUsed { get { return _socketLastUsed; } } } internal class ConnectionCache { // collection of RemoteConnection's. private static Hashtable _connections = new Hashtable(); // socket timeout data private static RegisteredWaitHandle _registeredWaitHandle; private static WaitOrTimerCallback _socketTimeoutDelegate; private static AutoResetEvent _socketTimeoutWaitHandle; private static TimeSpan _socketTimeoutPollTime = TimeSpan.FromSeconds(10); private static TimeSpan _portLifetime = TimeSpan.FromSeconds(10); static ConnectionCache() { InitializeConnectionTimeoutHandler(); } private static void InitializeConnectionTimeoutHandler() { _socketTimeoutDelegate = new WaitOrTimerCallback(TimeoutConnections); _socketTimeoutWaitHandle = new AutoResetEvent(false); _registeredWaitHandle = ThreadPool.UnsafeRegisterWaitForSingleObject( _socketTimeoutWaitHandle, _socketTimeoutDelegate, "IpcConnectionTimeout", _socketTimeoutPollTime, true); // execute only once } // InitializeSocketTimeoutHandler private static void TimeoutConnections(Object state, Boolean wasSignalled) { DateTime currentTime = DateTime.UtcNow; lock (_connections) { foreach (DictionaryEntry entry in _connections) { PortConnection connection = (PortConnection)entry.Value; if (DateTime.Now - connection.LastUsed > _portLifetime) connection.Port.Dispose(); } } _registeredWaitHandle.Unregister(null); _registeredWaitHandle = ThreadPool.UnsafeRegisterWaitForSingleObject( _socketTimeoutWaitHandle, _socketTimeoutDelegate, "IpcConnectionTimeout", _socketTimeoutPollTime, true); // execute only once } // TimeoutConnections // The key is expected to of the form portName public IpcPort GetConnection(String portName, bool secure, TokenImpersonationLevel level, int timeout) { PortConnection connection = null; lock (_connections) { bool cacheable = true; if (secure) { try { WindowsIdentity currentId = WindowsIdentity.GetCurrent(true/*ifImpersonating*/); if (currentId != null) { cacheable = false; currentId.Dispose(); } } catch(Exception) { cacheable = false; } } if (cacheable) { connection = (PortConnection)_connections[portName]; } if (connection == null || connection.Port.IsDisposed) { connection = new PortConnection(IpcPort.Connect(portName, secure, level, timeout)); connection.Port.Cacheable = cacheable; } else { // Remove the connection from the cache _connections.Remove(portName); } } return connection.Port; } // GetSocket public void ReleaseConnection(IpcPort port) { string portName = port.Name; PortConnection connection = (PortConnection)_connections[portName]; if (port.Cacheable && (connection == null || connection.Port.IsDisposed)) { lock(_connections) { _connections[portName] = new PortConnection(port); } } else { // there should have been a connection, so let's just close // this socket. port.Dispose(); } } // ReleasePort } // ConnectionCache } // 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
- HitTestWithGeometryDrawingContextWalker.cs
- BinaryMethodMessage.cs
- WebPartTransformerCollection.cs
- ConnectorRouter.cs
- GridItemProviderWrapper.cs
- mactripleDES.cs
- ProtocolReflector.cs
- UIElementCollection.cs
- OciHandle.cs
- ClaimComparer.cs
- PatternMatcher.cs
- StackOverflowException.cs
- SafeLocalMemHandle.cs
- DataContractSerializerFaultFormatter.cs
- ApplyTemplatesAction.cs
- CultureTableRecord.cs
- FloaterBaseParagraph.cs
- PointIndependentAnimationStorage.cs
- DependencyPropertyChangedEventArgs.cs
- SetterBaseCollection.cs
- ImageSource.cs
- DataGridColumn.cs
- SafeSecurityHandles.cs
- XmlCDATASection.cs
- StyleTypedPropertyAttribute.cs
- UncommonField.cs
- WorkflowCompensationBehavior.cs
- Speller.cs
- SessionStateSection.cs
- DrawingContextDrawingContextWalker.cs
- EventProviderClassic.cs
- ObsoleteAttribute.cs
- MsmqIntegrationChannelListener.cs
- ExceptionWrapper.cs
- DisplayInformation.cs
- ItemCollection.cs
- Label.cs
- SchemaTableOptionalColumn.cs
- CryptoApi.cs
- RectAnimationBase.cs
- DebugViewWriter.cs
- TempEnvironment.cs
- TrustManager.cs
- Knowncolors.cs
- ToolStripHighContrastRenderer.cs
- DbMetaDataColumnNames.cs
- NavigationProperty.cs
- DrawingContext.cs
- SerialPort.cs
- XPathDocumentBuilder.cs
- ViewgenGatekeeper.cs
- RuntimeVariablesExpression.cs
- CommonDialog.cs
- ThaiBuddhistCalendar.cs
- webeventbuffer.cs
- IntegrationExceptionEventArgs.cs
- GridViewColumn.cs
- RuntimeResourceSet.cs
- BindingElementExtensionElement.cs
- ObjectQuery.cs
- ThreadStartException.cs
- TextRangeEditLists.cs
- ColumnTypeConverter.cs
- VisualTreeHelper.cs
- __ComObject.cs
- XPathMultyIterator.cs
- SponsorHelper.cs
- DirectoryNotFoundException.cs
- KnownBoxes.cs
- PaperSource.cs
- ChangeDirector.cs
- ListArgumentProvider.cs
- AssemblyAttributes.cs
- DesignTimeParseData.cs
- ToolStripContentPanelDesigner.cs
- ScriptManager.cs
- ResumeStoryboard.cs
- PolyQuadraticBezierSegment.cs
- SendMailErrorEventArgs.cs
- StandardCommandToolStripMenuItem.cs
- DataGridColumnReorderingEventArgs.cs
- OleStrCAMarshaler.cs
- RepeaterItemEventArgs.cs
- MonikerUtility.cs
- XmlAttributeAttribute.cs
- EditorPartCollection.cs
- ConstrainedDataObject.cs
- FolderNameEditor.cs
- QuarticEase.cs
- NameSpaceExtractor.cs
- JsonGlobals.cs
- FlowThrottle.cs
- KoreanCalendar.cs
- MailFileEditor.cs
- ProvideValueServiceProvider.cs
- DataServiceQueryProvider.cs
- RegistrySecurity.cs
- WebRequestModuleElement.cs
- LinqDataSourceStatusEventArgs.cs
- DynamicPropertyHolder.cs