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
- RegexMatchCollection.cs
- DrawingVisualDrawingContext.cs
- TableLayoutPanelResizeGlyph.cs
- GlobalizationAssembly.cs
- CookieProtection.cs
- PropertyPushdownHelper.cs
- CaseInsensitiveHashCodeProvider.cs
- FileUpload.cs
- DiagnosticTraceSource.cs
- BufferedMessageData.cs
- WindowsBrush.cs
- DataGridColumnFloatingHeader.cs
- UInt32.cs
- TabItem.cs
- DataObjectSettingDataEventArgs.cs
- XsltCompileContext.cs
- ProcessModule.cs
- TextBounds.cs
- DockPatternIdentifiers.cs
- ReadOnlyTernaryTree.cs
- BindingManagerDataErrorEventArgs.cs
- CreateRefExpr.cs
- WebHttpBinding.cs
- NameValueFileSectionHandler.cs
- ItemsPanelTemplate.cs
- BypassElement.cs
- SectionXmlInfo.cs
- PnrpPermission.cs
- AxHost.cs
- DrawingContext.cs
- HtmlControl.cs
- CustomErrorsSectionWrapper.cs
- EventItfInfo.cs
- TrackingMemoryStreamFactory.cs
- FileUtil.cs
- ToolStripDropDownMenu.cs
- FamilyMapCollection.cs
- TextViewBase.cs
- FormatVersion.cs
- XmlSchema.cs
- SynchronizationContext.cs
- OAVariantLib.cs
- DPCustomTypeDescriptor.cs
- AssociatedControlConverter.cs
- ScriptReferenceEventArgs.cs
- FillErrorEventArgs.cs
- ThrowOnMultipleAssignment.cs
- MatrixKeyFrameCollection.cs
- UTF8Encoding.cs
- XamlToRtfWriter.cs
- StatusBarItem.cs
- HtmlPageAdapter.cs
- ComponentResourceKey.cs
- TextRangeBase.cs
- LayoutTable.cs
- ButtonBaseAdapter.cs
- Point3DAnimationUsingKeyFrames.cs
- ControlIdConverter.cs
- __FastResourceComparer.cs
- CharAnimationUsingKeyFrames.cs
- NativeMethods.cs
- QueueProcessor.cs
- QueryRelOp.cs
- DocumentGridPage.cs
- IsolatedStorageFileStream.cs
- SqlConnectionFactory.cs
- XmlUnspecifiedAttribute.cs
- OracleCommandBuilder.cs
- InfiniteIntConverter.cs
- PlaceHolder.cs
- IDQuery.cs
- TargetInvocationException.cs
- CachedFontFace.cs
- ValidatingReaderNodeData.cs
- BitmapEffectGeneralTransform.cs
- PageCache.cs
- FontStretchConverter.cs
- DefaultValueConverter.cs
- CodeGenerator.cs
- FontCacheUtil.cs
- odbcmetadatacolumnnames.cs
- Columns.cs
- RelationshipEndCollection.cs
- XMLUtil.cs
- UserPreference.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- TemplateColumn.cs
- LinkedResourceCollection.cs
- SortKey.cs
- SubpageParagraph.cs
- ListChangedEventArgs.cs
- LassoSelectionBehavior.cs
- EntityDataSourceWizardForm.cs
- Win32Native.cs
- DeclarativeExpressionConditionDeclaration.cs
- BindableTemplateBuilder.cs
- WSSecurityPolicy11.cs
- AccessDataSource.cs
- ConfigurationManagerHelperFactory.cs
- QilIterator.cs