Code:
/ 4.0 / 4.0 / 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.
//------------------------------------------------------------------------------
//
// 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
- SqlRecordBuffer.cs
- ObjectSet.cs
- ToolBarPanel.cs
- CombinedGeometry.cs
- XPathNodeList.cs
- SqlDataSourceSelectingEventArgs.cs
- InputDevice.cs
- SwitchElementsCollection.cs
- SmiMetaDataProperty.cs
- XmlAnyElementAttribute.cs
- HtmlSelect.cs
- ServiceHttpHandlerFactory.cs
- RelatedView.cs
- NumberFunctions.cs
- CodeBlockBuilder.cs
- SqlInternalConnectionTds.cs
- RequestTimeoutManager.cs
- XslTransform.cs
- ScriptControl.cs
- PermissionSetTriple.cs
- NumericUpDown.cs
- ProcessModuleCollection.cs
- SignatureHelper.cs
- DefaultPropertyAttribute.cs
- Guid.cs
- EtwTrace.cs
- GenericWebPart.cs
- ToolZone.cs
- FolderBrowserDialog.cs
- OdbcConnectionOpen.cs
- CertificateManager.cs
- HitTestWithPointDrawingContextWalker.cs
- ConfigDefinitionUpdates.cs
- Permission.cs
- xamlnodes.cs
- SubMenuStyleCollection.cs
- sitestring.cs
- SafeFileMapViewHandle.cs
- COM2ExtendedUITypeEditor.cs
- StreamSecurityUpgradeInitiatorBase.cs
- ResponseBodyWriter.cs
- UnsafeNativeMethods.cs
- XPathParser.cs
- ObjectTag.cs
- XsdBuilder.cs
- DrawingDrawingContext.cs
- RepeaterCommandEventArgs.cs
- BulletChrome.cs
- DocumentViewerBase.cs
- EncodingTable.cs
- DoubleAnimation.cs
- HtmlButton.cs
- InfocardClientCredentials.cs
- WebPartDisplayModeEventArgs.cs
- XmlComment.cs
- TextMarkerSource.cs
- TemplateParser.cs
- EventLogEntry.cs
- TextBoxDesigner.cs
- NavigatorOutput.cs
- WebPartTransformerCollection.cs
- ObjectItemAttributeAssemblyLoader.cs
- ReferencedCollectionType.cs
- SoapReflectionImporter.cs
- WebPartMovingEventArgs.cs
- RegexCode.cs
- ArrayWithOffset.cs
- SqlCommandSet.cs
- CallbackValidator.cs
- MouseGestureValueSerializer.cs
- CodeCastExpression.cs
- SimpleTypeResolver.cs
- followingquery.cs
- BuiltInExpr.cs
- Rules.cs
- ConsumerConnectionPointCollection.cs
- DeviceSpecificChoiceCollection.cs
- OperatingSystem.cs
- WindowsGraphicsWrapper.cs
- PermissionSet.cs
- MethodExpr.cs
- StaticFileHandler.cs
- Debug.cs
- RequestCachePolicy.cs
- AsyncDataRequest.cs
- DiscoveryInnerClientAdhocCD1.cs
- StylusSystemGestureEventArgs.cs
- _SslStream.cs
- CreateUserWizardStep.cs
- DataProtectionSecurityStateEncoder.cs
- MatrixAnimationUsingKeyFrames.cs
- EventPrivateKey.cs
- StrokeNodeOperations.cs
- UrlMappingsSection.cs
- MethodBuilderInstantiation.cs
- RequestSecurityTokenResponse.cs
- MobileRedirect.cs
- SoapConverter.cs
- HandlerBase.cs
- Win32PrintDialog.cs