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
- oledbmetadatacollectionnames.cs
- TextRangeEditTables.cs
- GraphicsContainer.cs
- ContentPosition.cs
- _NativeSSPI.cs
- EditingCommands.cs
- XmlCodeExporter.cs
- Utils.cs
- LOSFormatter.cs
- PointAnimationClockResource.cs
- PhysicalOps.cs
- DoubleKeyFrameCollection.cs
- ThumbButtonInfo.cs
- AutoSizeComboBox.cs
- InkCanvasInnerCanvas.cs
- MsmqIntegrationMessageProperty.cs
- JsonServiceDocumentSerializer.cs
- ColumnTypeConverter.cs
- RelationshipType.cs
- ToolStripContainerDesigner.cs
- ElementMarkupObject.cs
- RelOps.cs
- Stackframe.cs
- IisTraceListener.cs
- Cursors.cs
- CodeDomSerializer.cs
- ConvertEvent.cs
- ProcessModelInfo.cs
- XmlSchemaAll.cs
- Stacktrace.cs
- ToolStripButton.cs
- WebServiceResponseDesigner.cs
- DefaultHttpHandler.cs
- DataControlCommands.cs
- ButtonFieldBase.cs
- DebugController.cs
- DeflateEmulationStream.cs
- GeneratedContractType.cs
- SessionStateItemCollection.cs
- HTMLTagNameToTypeMapper.cs
- TextRunCacheImp.cs
- HttpListenerRequestUriBuilder.cs
- XmlNullResolver.cs
- __ConsoleStream.cs
- _MultipleConnectAsync.cs
- SmtpFailedRecipientException.cs
- While.cs
- ExpressionBuilderContext.cs
- SpecularMaterial.cs
- SignatureResourcePool.cs
- Baml2006KnownTypes.cs
- HostProtectionPermission.cs
- RelationshipManager.cs
- ListViewCancelEventArgs.cs
- EventProvider.cs
- SafeNativeMethodsCLR.cs
- ValidatedMobileControlConverter.cs
- DataTrigger.cs
- DetailsViewCommandEventArgs.cs
- GenericsInstances.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- RequiredFieldValidator.cs
- InvalidEnumArgumentException.cs
- ObjectViewEntityCollectionData.cs
- Selection.cs
- EntityContainerEmitter.cs
- QueryOpcode.cs
- CompareValidator.cs
- InternalConfigHost.cs
- TemplateNameScope.cs
- XmlSchemaAppInfo.cs
- FlowPosition.cs
- Region.cs
- AvTrace.cs
- DefaultPropertyAttribute.cs
- Converter.cs
- PrintEvent.cs
- SafeThreadHandle.cs
- IxmlLineInfo.cs
- PreviewControlDesigner.cs
- UIntPtr.cs
- HMACSHA256.cs
- Int16.cs
- ToolboxCategoryItems.cs
- AuthenticationSection.cs
- ComboBoxItem.cs
- FontFamilyIdentifier.cs
- CommandTreeTypeHelper.cs
- ObjectStateManager.cs
- ObjectViewEntityCollectionData.cs
- DataObject.cs
- Package.cs
- SrgsRuleRef.cs
- GridViewColumnHeaderAutomationPeer.cs
- ComAwareEventInfo.cs
- GenericTypeParameterBuilder.cs
- WorkflowFileItem.cs
- DependencyPropertyDescriptor.cs
- IndicCharClassifier.cs
- ClientReliableChannelBinder.cs