Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Net / System / Net / ConnectionPoolManager.cs / 1 / 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; } } } // 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; } } } // 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
- SafePEFileHandle.cs
- VectorConverter.cs
- RequestCacheManager.cs
- HtmlTable.cs
- _DigestClient.cs
- DataGridToolTip.cs
- CodeCatchClause.cs
- TimeSpanOrInfiniteValidator.cs
- DesignerTransaction.cs
- RandomNumberGenerator.cs
- DataControlField.cs
- ProtocolsConfiguration.cs
- ApplicationDirectoryMembershipCondition.cs
- BrowserCapabilitiesFactory.cs
- XPathNavigatorReader.cs
- TimeSpanConverter.cs
- VirtualDirectoryMappingCollection.cs
- Exception.cs
- HitTestResult.cs
- NativeRecognizer.cs
- GradientStopCollection.cs
- NameHandler.cs
- OpacityConverter.cs
- ObjectQueryProvider.cs
- mansign.cs
- httpapplicationstate.cs
- HttpDictionary.cs
- DataGridCaption.cs
- XmlDataSourceView.cs
- EntryWrittenEventArgs.cs
- TrackingRecord.cs
- AudioDeviceOut.cs
- SqlXml.cs
- DiagnosticSection.cs
- cookiecontainer.cs
- HtmlDocument.cs
- Base64Encoder.cs
- LambdaCompiler.Generated.cs
- EditingCoordinator.cs
- SqlPersonalizationProvider.cs
- LocatorManager.cs
- FreezableCollection.cs
- SafeCoTaskMem.cs
- ISAPIRuntime.cs
- util.cs
- DesignerActionTextItem.cs
- ValidatorCompatibilityHelper.cs
- SqlDelegatedTransaction.cs
- PageRanges.cs
- LineSegment.cs
- CSharpCodeProvider.cs
- UInt64.cs
- DataGridViewColumnCollectionDialog.cs
- DiagnosticsElement.cs
- CodeDelegateInvokeExpression.cs
- EntityDataSourceColumn.cs
- Listbox.cs
- RoutedEvent.cs
- XPathScanner.cs
- Point3DValueSerializer.cs
- BufferAllocator.cs
- Publisher.cs
- FileLogRecordStream.cs
- WindowsSysHeader.cs
- XamlGridLengthSerializer.cs
- ComAwareEventInfo.cs
- WsiProfilesElement.cs
- TrackingProfileCache.cs
- EditorReuseAttribute.cs
- RunWorkerCompletedEventArgs.cs
- TraceContextEventArgs.cs
- FormatConvertedBitmap.cs
- SchemaLookupTable.cs
- ScaleTransform.cs
- SymbolEqualComparer.cs
- HasCopySemanticsAttribute.cs
- LineInfo.cs
- ResourceSetExpression.cs
- QueryExpr.cs
- AutomationElementIdentifiers.cs
- AssemblyUtil.cs
- ArrangedElement.cs
- RelationshipConstraintValidator.cs
- CreateUserErrorEventArgs.cs
- RoleGroupCollectionEditor.cs
- BufferModeSettings.cs
- TraceContextEventArgs.cs
- ExpressionEditor.cs
- AmbiguousMatchException.cs
- Itemizer.cs
- MetadataArtifactLoaderComposite.cs
- NativeCompoundFileAPIs.cs
- SqlBuffer.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- MsmqOutputMessage.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- TextSegment.cs
- BridgeDataRecord.cs
- FileSecurity.cs
- HierarchicalDataTemplate.cs