Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / ManagedLibraries / Remoting / Channels / CORE / ExclusiveTcpListener.cs / 1305376 / ExclusiveTcpListener.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Net; using System.Net.Sockets; namespace System.Runtime.Remoting.Channels { // This class provides a TcpListener that is capable of setting the ExclusiveAddressUse flag // on a socket, which will prevent another app from hijacking our port. This flag is not supported // on Win9x, so we just omit the call to SetSocketOption on non-NT platforms. internal class ExclusiveTcpListener : TcpListener { internal ExclusiveTcpListener(IPAddress localaddr, int port) : base(localaddr, port) {} // Start will attempt to start listening. If exclusiveAddressUse is true, then // we will attempt to use the ExclusiveAddressUse flag, but if bind fails (which will // happen for a regular user on win2k and xp), we try again without the flag. internal void Start(bool exclusiveAddressUse) { // we only attempt to set the socket option if // 1. the exclusiveAddressUse param is true // 2. the platform is NT - this option is unavailable on other platforms // 3. Server is not null - if it IS null, base.Start will throw a nice error for us // 4. the listener is not already listening - it's too late in that case (base.Start will return immediately) bool attemptSetSocketOption = exclusiveAddressUse && #if !FEATURE_PAL Environment.OSVersion.Platform == PlatformID.Win32NT && #endif // !FEATURE_PAL base.Server != null && !base.Active; if (attemptSetSocketOption) { // Attempt to set the option. We won't actually find out if this fails until // we try to bind (which happens in base.Start()). base.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ExclusiveAddressUse, 1); } try { base.Start(); } catch (SocketException) { if (attemptSetSocketOption) { // Turn off the option and try again - maybe this process doesn't have // permission to use the option. Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ExclusiveAddressUse, 0); base.Start(); } else { // It wasn't because we set the ExclusiveAddressUse option - let the // exception bubble up throw; } } } internal bool IsListening { get { return Active; } } } } // namespace System.Runtime.Remoting.Channels // 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
- NotCondition.cs
- ScriptRegistrationManager.cs
- DependencyPropertyDescriptor.cs
- XmlLanguage.cs
- FixedTextBuilder.cs
- SafeNativeMethodsMilCoreApi.cs
- DataControlField.cs
- ObjectQueryProvider.cs
- ResourceReferenceExpressionConverter.cs
- Configuration.cs
- HtmlInputButton.cs
- SoapTypeAttribute.cs
- AtomServiceDocumentSerializer.cs
- RelationshipEnd.cs
- JsonMessageEncoderFactory.cs
- Variable.cs
- TagMapCollection.cs
- ProjectionCamera.cs
- NullableLongMinMaxAggregationOperator.cs
- PointCollection.cs
- ColumnTypeConverter.cs
- streamingZipPartStream.cs
- DataControlFieldHeaderCell.cs
- BindingSourceDesigner.cs
- CultureInfoConverter.cs
- RegexCode.cs
- mansign.cs
- versioninfo.cs
- RowParagraph.cs
- RecordsAffectedEventArgs.cs
- ProgressBarBrushConverter.cs
- LicenseContext.cs
- AssemblyCollection.cs
- LogPolicy.cs
- SplineKeyFrames.cs
- ModelProperty.cs
- QuaternionRotation3D.cs
- BridgeDataRecord.cs
- ValueQuery.cs
- CodeTypeDeclaration.cs
- CSharpCodeProvider.cs
- BitmapCache.cs
- Listbox.cs
- HttpCacheVary.cs
- ToolBarOverflowPanel.cs
- HandledMouseEvent.cs
- objectresult_tresulttype.cs
- dtdvalidator.cs
- HtmlInputRadioButton.cs
- DateTimeOffset.cs
- ScopeElement.cs
- RegistrySecurity.cs
- WorkflowPageSetupDialog.cs
- DataServiceStreamProviderWrapper.cs
- SByteStorage.cs
- Point3D.cs
- TimeoutException.cs
- WindowInteropHelper.cs
- PathData.cs
- MLangCodePageEncoding.cs
- DataControlFieldCell.cs
- ContractAdapter.cs
- Size3D.cs
- ProxyElement.cs
- keycontainerpermission.cs
- GridViewCellAutomationPeer.cs
- XmlReturnReader.cs
- Panel.cs
- CompilerResults.cs
- ClientTargetSection.cs
- FrameworkElement.cs
- XmlQualifiedNameTest.cs
- WindowsMenu.cs
- SchemaImporterExtensionElementCollection.cs
- DeviceFiltersSection.cs
- RelatedPropertyManager.cs
- TableLayoutStyleCollection.cs
- DeleteCardRequest.cs
- DeclarativeConditionsCollection.cs
- ContentElement.cs
- linebase.cs
- XmlDocumentType.cs
- DataGridColumnCollectionEditor.cs
- cache.cs
- CultureNotFoundException.cs
- FormsAuthenticationTicket.cs
- SingletonInstanceContextProvider.cs
- SiteMapDataSourceView.cs
- Funcletizer.cs
- DefaultShape.cs
- ValidationPropertyAttribute.cs
- ProvidePropertyAttribute.cs
- TeredoHelper.cs
- JournalEntryStack.cs
- ElementHostAutomationPeer.cs
- TableTextElementCollectionInternal.cs
- TimeStampChecker.cs
- SafeNativeMethods.cs
- InstanceCollisionException.cs
- EntityDataReader.cs