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
- ProfilePropertySettings.cs
- AsyncSerializedWorker.cs
- basevalidator.cs
- CodeExporter.cs
- HitTestWithGeometryDrawingContextWalker.cs
- HtmlEmptyTagControlBuilder.cs
- PasswordBoxAutomationPeer.cs
- TimeoutTimer.cs
- Int32Animation.cs
- BufferModeSettings.cs
- CodeAccessSecurityEngine.cs
- ServiceBehaviorElementCollection.cs
- TargetInvocationException.cs
- ConfigurationProperty.cs
- DataBindingValueUIHandler.cs
- MessageQueueException.cs
- SHA1Managed.cs
- DragDrop.cs
- XamlReader.cs
- DockPatternIdentifiers.cs
- TableItemProviderWrapper.cs
- TransformPatternIdentifiers.cs
- EventBuilder.cs
- TreeViewBindingsEditorForm.cs
- XmlWrappingWriter.cs
- XmlProcessingInstruction.cs
- FunctionDetailsReader.cs
- TrackingServices.cs
- ObjectSecurity.cs
- MultiTouchSystemGestureLogic.cs
- PanelStyle.cs
- SimpleApplicationHost.cs
- LocationSectionRecord.cs
- HitTestWithGeometryDrawingContextWalker.cs
- GeneralTransformGroup.cs
- XmlElement.cs
- ETagAttribute.cs
- FormConverter.cs
- SqlBulkCopyColumnMappingCollection.cs
- BrowserCapabilitiesFactory.cs
- ResXResourceWriter.cs
- StandardBindingReliableSessionElement.cs
- OperationResponse.cs
- DesignerDataView.cs
- InvokeHandlers.cs
- ProcessHostConfigUtils.cs
- ManipulationDevice.cs
- BamlRecordHelper.cs
- ReachPrintTicketSerializerAsync.cs
- NavigationPropertyEmitter.cs
- SkipQueryOptionExpression.cs
- Calendar.cs
- Canvas.cs
- WebServiceParameterData.cs
- SoapMessage.cs
- AttributeCollection.cs
- ICollection.cs
- MessageBodyDescription.cs
- MultiplexingDispatchMessageFormatter.cs
- HostedAspNetEnvironment.cs
- RemotingServices.cs
- TextCollapsingProperties.cs
- HMAC.cs
- ParagraphResult.cs
- HostExecutionContextManager.cs
- ProcessDesigner.cs
- TcpClientChannel.cs
- ImportOptions.cs
- GroupBox.cs
- SafeViewOfFileHandle.cs
- AddDataControlFieldDialog.cs
- RoleManagerModule.cs
- COM2Enum.cs
- HierarchicalDataBoundControlAdapter.cs
- DataGridHeaderBorder.cs
- EntityDataReader.cs
- MetadataItem.cs
- SimpleHandlerBuildProvider.cs
- DocumentOrderComparer.cs
- BitmapEffect.cs
- BufferedReadStream.cs
- RowsCopiedEventArgs.cs
- ComAwareEventInfo.cs
- ReadOnlyNameValueCollection.cs
- SafeFileMappingHandle.cs
- SqlBooleanMismatchVisitor.cs
- SparseMemoryStream.cs
- keycontainerpermission.cs
- SmtpReplyReader.cs
- ClientOptions.cs
- ValidatorCollection.cs
- ValidationHelper.cs
- TimelineGroup.cs
- MergeFilterQuery.cs
- SurrogateEncoder.cs
- ObjRef.cs
- SymbolEqualComparer.cs
- EntityDesignerUtils.cs
- SelectionItemPattern.cs
- Row.cs