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
- Compensate.cs
- SynchronizationLockException.cs
- Int32AnimationBase.cs
- EndGetFileNameFromUserRequest.cs
- TreeNodeClickEventArgs.cs
- PropertyFilterAttribute.cs
- Pen.cs
- Rules.cs
- TextProperties.cs
- DBDataPermission.cs
- SHA384.cs
- CAGDesigner.cs
- TextClipboardData.cs
- ActivityWithResultConverter.cs
- Lease.cs
- StrongNameUtility.cs
- SqlClientWrapperSmiStreamChars.cs
- SqlClientWrapperSmiStreamChars.cs
- BufferAllocator.cs
- HostProtectionPermission.cs
- ErrorTableItemStyle.cs
- XPathSingletonIterator.cs
- ServiceObjectContainer.cs
- TextTreeInsertElementUndoUnit.cs
- Timer.cs
- ViewStateModeByIdAttribute.cs
- DecimalAnimationUsingKeyFrames.cs
- WeakReferenceList.cs
- WebConfigurationHostFileChange.cs
- DataGridViewAutoSizeModeEventArgs.cs
- DataObjectAttribute.cs
- HttpFileCollection.cs
- OracleParameterCollection.cs
- ErrorWebPart.cs
- UnsafeNativeMethods.cs
- AtomMaterializer.cs
- BooleanExpr.cs
- SqlClientWrapperSmiStream.cs
- AsyncResult.cs
- Effect.cs
- ProgressBarAutomationPeer.cs
- MenuItemStyle.cs
- XPathSelfQuery.cs
- ProfilePropertyNameValidator.cs
- FirstMatchCodeGroup.cs
- EmptyStringExpandableObjectConverter.cs
- NumberFunctions.cs
- UnsafeNativeMethods.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- WasHttpHandlersInstallComponent.cs
- X509CertificateCollection.cs
- LicenseException.cs
- IdentifierCollection.cs
- SafeThemeHandle.cs
- InvalidFilterCriteriaException.cs
- ActiveDocumentEvent.cs
- SlipBehavior.cs
- InputScopeAttribute.cs
- URI.cs
- WhitespaceRuleLookup.cs
- TextControl.cs
- oledbconnectionstring.cs
- HttpApplication.cs
- BitmapScalingModeValidation.cs
- ManagedFilter.cs
- WsdlEndpointConversionContext.cs
- HtmlInputPassword.cs
- TreeViewItemAutomationPeer.cs
- SerializationStore.cs
- OracleConnectionFactory.cs
- DataGridViewDataErrorEventArgs.cs
- SolidColorBrush.cs
- SwitchAttribute.cs
- Util.cs
- FirstMatchCodeGroup.cs
- NominalTypeEliminator.cs
- DefaultTextStoreTextComposition.cs
- oledbmetadatacolumnnames.cs
- DataServiceRequestArgs.cs
- CodeDefaultValueExpression.cs
- TemplatePagerField.cs
- EventPrivateKey.cs
- TypeInfo.cs
- ColumnClickEvent.cs
- XmlSchemaType.cs
- DataListItemEventArgs.cs
- typedescriptorpermissionattribute.cs
- TypedRowHandler.cs
- ControlCollection.cs
- BridgeDataReader.cs
- MobileUserControlDesigner.cs
- SelectionPattern.cs
- _RequestLifetimeSetter.cs
- DataViewSettingCollection.cs
- CDSsyncETWBCLProvider.cs
- OracleConnectionString.cs
- UDPClient.cs
- Image.cs
- Splitter.cs
- FixedSOMTextRun.cs