Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / ConnectionPoolManager.cs / 1305376 / ConnectionPoolManager.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net { using System; using System.Collections; using System.Diagnostics; using System.Security; using System.Security.Permissions; using System.Threading; using System.Globalization; internal class ConnectionPoolManager { private static Hashtable m_ConnectionPools = new Hashtable(); // Hashtable used for connection pools private static object s_InternalSyncObject; private ConnectionPoolManager() { } private static object InternalSyncObject { get { if (s_InternalSyncObject == null) { object o = new Object(); Interlocked.CompareExchange(ref s_InternalSyncObject, o, null); } return s_InternalSyncObject; } } /*internal static ConnectionPool[] ConnectionPools { get { lock(InternalSyncObject) { ConnectionPool [] connectionPools = new ConnectionPool[m_ConnectionPools.Count]; m_ConnectionPools.CopyTo(connectionPools, 0); return connectionPools; } } } */ private static string GenerateKey(string hostName, int port, string groupName) { return hostName+"\r"+port.ToString(NumberFormatInfo.InvariantInfo)+"\r"+groupName; } internal static ConnectionPool GetConnectionPool(ServicePoint servicePoint, string groupName, CreateConnectionDelegate createConnectionCallback) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool) m_ConnectionPools[key]; if (connectionPool == null) { connectionPool = new ConnectionPool(servicePoint, servicePoint.ConnectionLimit, 0, servicePoint.MaxIdleTime, createConnectionCallback); m_ConnectionPools[key] = connectionPool; } return connectionPool; } } /* internal static ConnectionPool GetConnectionPool(string hostName, int port, string groupName, CreateConnectionDelegate createConnectionCallback) { string key = hostName + "\r" + port.ToString(NumberFormatInfo.InvariantInfo) + "\r" + groupName; lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool) m_ConnectionPools[key]; if (connectionPool == null) { ServicePoint servicePoint = ServicePointManager.FindServicePoint(new Uri("sockets://" + hostName + ":" + port.ToString(NumberFormatInfo.InvariantInfo)), null); connectionPool = new ConnectionPool(servicePoint, m_DefaultMaxPool, 0, servicePoint.MaxIdleTime, createConnectionCallback); m_ConnectionPools[key] = connectionPool; } return connectionPool; } } */ internal static bool RemoveConnectionPool(ServicePoint servicePoint, string groupName) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool)(m_ConnectionPools[key]); if(connectionPool != null) { m_ConnectionPools[key] = null; m_ConnectionPools.Remove(key); return true; } } return false; } // Gets the connection pool for the specified service point (if it exists) and // invokes ForceCleanup to gracefully clean up any connections in the pool. // // preconditions: none // // postconditions: if a connection pool for the specified servicepoint and group name // exists, any open connections that are not in use will be gracefully cleaned up. // // Note: this will not destroy the connection pool itself so any future objects that // need that connection pool will still be able to access it to create new connections // and any objects using connections in the pool will still be able to return them internal static void CleanupConnectionPool(ServicePoint servicePoint, string groupName) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock (InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool)(m_ConnectionPools[key]); if (connectionPool != null) { connectionPool.ForceCleanup(); } } } } } // 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
- Roles.cs
- PenLineJoinValidation.cs
- ResourceProviderFactory.cs
- XmlSignificantWhitespace.cs
- CodeExpressionCollection.cs
- CodeLabeledStatement.cs
- ResourceDisplayNameAttribute.cs
- XmlNavigatorStack.cs
- _AutoWebProxyScriptHelper.cs
- DataListItemEventArgs.cs
- IPCCacheManager.cs
- UpdatePanel.cs
- FixedTextView.cs
- InlineObject.cs
- ContextProperty.cs
- QueueException.cs
- BuildDependencySet.cs
- TextEffectCollection.cs
- DebugHandleTracker.cs
- Int16AnimationBase.cs
- _SslState.cs
- HandleCollector.cs
- SqlTriggerAttribute.cs
- CompositeScriptReferenceEventArgs.cs
- ProcessModuleCollection.cs
- AlternateViewCollection.cs
- ExchangeUtilities.cs
- OutputCacheModule.cs
- CellParagraph.cs
- Parser.cs
- M3DUtil.cs
- EdmProperty.cs
- BooleanToVisibilityConverter.cs
- StylusPointProperty.cs
- WorkflowInstanceUnhandledExceptionRecord.cs
- mansign.cs
- FunctionDetailsReader.cs
- AbstractExpressions.cs
- WaitingCursor.cs
- Invariant.cs
- HtmlTableRow.cs
- XmlNodeChangedEventArgs.cs
- MultiSelector.cs
- HijriCalendar.cs
- ManagedWndProcTracker.cs
- ShaderEffect.cs
- WebCategoryAttribute.cs
- StringToken.cs
- ConnectionStringsExpressionBuilder.cs
- ConstraintStruct.cs
- RefType.cs
- VisualStyleInformation.cs
- MatrixUtil.cs
- SolidColorBrush.cs
- HostProtectionException.cs
- ContentElementCollection.cs
- MailWriter.cs
- Label.cs
- log.cs
- ActivitySurrogateSelector.cs
- Propagator.cs
- X509KeyIdentifierClauseType.cs
- CssClassPropertyAttribute.cs
- Compiler.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- CommandID.cs
- OpenTypeLayoutCache.cs
- mansign.cs
- DBConnectionString.cs
- UnionCqlBlock.cs
- AccessDataSourceDesigner.cs
- WebPartsPersonalizationAuthorization.cs
- DefaultAutoFieldGenerator.cs
- FileNameEditor.cs
- newinstructionaction.cs
- EntityReference.cs
- DataGridViewLinkCell.cs
- EndpointConfigContainer.cs
- SafeArrayTypeMismatchException.cs
- PrimitiveXmlSerializers.cs
- TemplateBindingExpressionConverter.cs
- RequestChannelBinder.cs
- XmlLanguageConverter.cs
- AsymmetricSignatureFormatter.cs
- Accessible.cs
- VBIdentifierNameEditor.cs
- wgx_sdk_version.cs
- SqlPersonalizationProvider.cs
- DataTableTypeConverter.cs
- EncryptedHeader.cs
- MethodInfo.cs
- CodeThrowExceptionStatement.cs
- ApplicationTrust.cs
- WebBrowserNavigatingEventHandler.cs
- VerificationAttribute.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- Mutex.cs
- ChangeConflicts.cs
- TransformGroup.cs
- BindingSource.cs