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
- ChangePassword.cs
- DataGridViewHitTestInfo.cs
- MailAddressCollection.cs
- DomainUpDown.cs
- TypefaceMap.cs
- LogStore.cs
- ListView.cs
- SBCSCodePageEncoding.cs
- EventRoute.cs
- nulltextcontainer.cs
- ConfigurationSection.cs
- CultureMapper.cs
- ClientViaElement.cs
- StateRuntime.cs
- AutomationElementCollection.cs
- ResourceDictionary.cs
- RegexTree.cs
- DurableServiceAttribute.cs
- StorageTypeMapping.cs
- DateTimePicker.cs
- BindingContext.cs
- PropertyMap.cs
- hwndwrapper.cs
- EdmEntityTypeAttribute.cs
- TextWriterEngine.cs
- PropertyItem.cs
- SemaphoreSecurity.cs
- ReadOnlyActivityGlyph.cs
- LogicalChannel.cs
- VectorAnimationUsingKeyFrames.cs
- ComponentCache.cs
- CmsInterop.cs
- DllHostInitializer.cs
- DataObjectEventArgs.cs
- Dynamic.cs
- LocationFactory.cs
- GCHandleCookieTable.cs
- MaterializeFromAtom.cs
- FileClassifier.cs
- DateTimeSerializationSection.cs
- CodeAssignStatement.cs
- ContextConfiguration.cs
- GridEntry.cs
- AutoGeneratedField.cs
- PolicyUnit.cs
- PackagePart.cs
- BorderGapMaskConverter.cs
- EventLogger.cs
- ImageIndexConverter.cs
- LayoutSettings.cs
- OracleParameterBinding.cs
- FileDialogCustomPlacesCollection.cs
- DetailsViewInsertEventArgs.cs
- XmlDocumentType.cs
- ToolStripButton.cs
- RegexWorker.cs
- ControlHelper.cs
- PropertyMapper.cs
- isolationinterop.cs
- SizeF.cs
- ProtectedConfigurationSection.cs
- invalidudtexception.cs
- KeyValuePairs.cs
- OutputCacheSection.cs
- MultiAsyncResult.cs
- ProgressPage.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- XpsFilter.cs
- HttpClientCertificate.cs
- TransformGroup.cs
- ObjectAnimationBase.cs
- DBParameter.cs
- ExclusiveCanonicalizationTransform.cs
- WindowsSolidBrush.cs
- PointCollection.cs
- XsltCompileContext.cs
- LambdaSerializationException.cs
- MissingManifestResourceException.cs
- KeyTime.cs
- SqlDependencyUtils.cs
- EdmTypeAttribute.cs
- SecurityContext.cs
- SwitchCase.cs
- ISFTagAndGuidCache.cs
- ListCollectionView.cs
- WindowsBrush.cs
- TimelineGroup.cs
- ConfigurationPropertyAttribute.cs
- X509CertificateClaimSet.cs
- Brushes.cs
- _NativeSSPI.cs
- MaxMessageSizeStream.cs
- ServiceBusyException.cs
- UInt32.cs
- XamlSerializer.cs
- HTTPNotFoundHandler.cs
- TypedElement.cs
- DataServiceExpressionVisitor.cs
- DoubleAnimationClockResource.cs
- ClientTargetCollection.cs