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
- UInt32Storage.cs
- CapabilitiesPattern.cs
- XmlILModule.cs
- CompareValidator.cs
- Assert.cs
- BinaryFormatterWriter.cs
- DnsPermission.cs
- FrameSecurityDescriptor.cs
- HandlerBase.cs
- ComponentConverter.cs
- AsyncSerializedWorker.cs
- SHA384CryptoServiceProvider.cs
- RtfControlWordInfo.cs
- SmiConnection.cs
- ApplicationTrust.cs
- WebPartsSection.cs
- XmlTextReaderImpl.cs
- XmlSchemaSimpleContentExtension.cs
- PathFigureCollection.cs
- RegistrySecurity.cs
- XmlCDATASection.cs
- EntityDataSourceView.cs
- WithParamAction.cs
- Button.cs
- DataServiceExpressionVisitor.cs
- IResourceProvider.cs
- Clipboard.cs
- AccessDataSourceView.cs
- SynchronizedInputPattern.cs
- ConfigurationProviderException.cs
- Model3DCollection.cs
- PropertyNames.cs
- TextView.cs
- VirtualDirectoryMapping.cs
- OutArgumentConverter.cs
- NamespaceEmitter.cs
- DBParameter.cs
- ExtensionWindow.cs
- DataGridCaption.cs
- HttpSessionStateBase.cs
- ToolBarButtonClickEvent.cs
- DataGridViewTextBoxColumn.cs
- RelatedView.cs
- WebPartAuthorizationEventArgs.cs
- OdbcPermission.cs
- SystemPens.cs
- WSHttpBindingBase.cs
- DrawingServices.cs
- EventSourceCreationData.cs
- ReadOnlyCollectionBase.cs
- NamedPipeTransportManager.cs
- DataSourceControlBuilder.cs
- CodeBinaryOperatorExpression.cs
- XmlComplianceUtil.cs
- CheckBoxRenderer.cs
- TreeViewItemAutomationPeer.cs
- SyndicationElementExtension.cs
- TraversalRequest.cs
- MethodInfo.cs
- CachedCompositeFamily.cs
- User.cs
- COM2IDispatchConverter.cs
- ellipse.cs
- CornerRadius.cs
- StorageBasedPackageProperties.cs
- FixedSOMTextRun.cs
- DataKey.cs
- XappLauncher.cs
- Menu.cs
- ChineseLunisolarCalendar.cs
- ObjectDataSourceEventArgs.cs
- documentation.cs
- XmlUTF8TextReader.cs
- Opcode.cs
- Part.cs
- Pair.cs
- ResourceDefaultValueAttribute.cs
- QEncodedStream.cs
- ContractAdapter.cs
- SafeRegistryHandle.cs
- SqlDataRecord.cs
- StrongNameKeyPair.cs
- SimpleApplicationHost.cs
- MailMessageEventArgs.cs
- StandardBindingElement.cs
- TimeBoundedCache.cs
- RegexCapture.cs
- _Semaphore.cs
- WasHttpHandlersInstallComponent.cs
- QuaternionConverter.cs
- EntityTypeEmitter.cs
- RunClient.cs
- XmlNodeReader.cs
- DrawingAttributes.cs
- DataGridViewRowHeaderCell.cs
- metadatamappinghashervisitor.cs
- Pts.cs
- DiffuseMaterial.cs
- XmlSerializationGeneratedCode.cs
- SQLInt32.cs