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
- DateTimeOffset.cs
- RepeatBehavior.cs
- UnsettableComboBox.cs
- FlowNode.cs
- Expr.cs
- AnnotationDocumentPaginator.cs
- DivideByZeroException.cs
- GridViewItemAutomationPeer.cs
- InvalidContentTypeException.cs
- GestureRecognizer.cs
- GeneralTransform3DTo2D.cs
- cache.cs
- MgmtConfigurationRecord.cs
- CallId.cs
- PointAnimationClockResource.cs
- WeakKeyDictionary.cs
- KeyInterop.cs
- SystemThemeKey.cs
- TransportBindingElement.cs
- WebColorConverter.cs
- WebBrowser.cs
- DataGridLinkButton.cs
- ArrangedElement.cs
- CngAlgorithm.cs
- ExceptionValidationRule.cs
- XmlLangPropertyAttribute.cs
- ReadWriteSpinLock.cs
- TextElementAutomationPeer.cs
- XamlStream.cs
- UITypeEditors.cs
- HttpConfigurationSystem.cs
- ContextMenuStripGroupCollection.cs
- ExpressionBuilder.cs
- EntityTypeBase.cs
- XmlCDATASection.cs
- InstancePersistenceEvent.cs
- QilTargetType.cs
- AnimationLayer.cs
- _NestedMultipleAsyncResult.cs
- DynamicRendererThreadManager.cs
- ComponentDesigner.cs
- XmlSchemaGroup.cs
- Delegate.cs
- GlyphRunDrawing.cs
- SEHException.cs
- HandoffBehavior.cs
- ClientApiGenerator.cs
- PageRanges.cs
- StringFunctions.cs
- EncoderBestFitFallback.cs
- basecomparevalidator.cs
- GroupBoxRenderer.cs
- SimpleHandlerBuildProvider.cs
- MaterialCollection.cs
- BezierSegment.cs
- StatusBarItem.cs
- HitTestFilterBehavior.cs
- AcceptorSessionSymmetricMessageSecurityProtocol.cs
- ToolStripControlHost.cs
- QilScopedVisitor.cs
- CachingParameterInspector.cs
- StreamUpgradeInitiator.cs
- AppDomainManager.cs
- PartialToken.cs
- ListDictionary.cs
- GCHandleCookieTable.cs
- ConfigXmlComment.cs
- TraceHwndHost.cs
- ReadOnlyTernaryTree.cs
- MgmtResManager.cs
- ScrollData.cs
- Touch.cs
- AndCondition.cs
- AlternationConverter.cs
- Italic.cs
- DescendentsWalker.cs
- SimpleMailWebEventProvider.cs
- InternalConfigSettingsFactory.cs
- ResourceManager.cs
- TimeSpanStorage.cs
- SessionStateSection.cs
- RegexCompiler.cs
- TypeDependencyAttribute.cs
- OlePropertyStructs.cs
- DecoderFallback.cs
- PackUriHelper.cs
- CompressionTransform.cs
- ProviderException.cs
- FilterEventArgs.cs
- ChannelServices.cs
- HtmlInputHidden.cs
- SQLCharsStorage.cs
- Avt.cs
- UpdateTranslator.cs
- OdbcConnectionFactory.cs
- ApplicationDirectoryMembershipCondition.cs
- PortCache.cs
- ButtonField.cs
- RefreshEventArgs.cs
- DynamicPhysicalDiscoSearcher.cs