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
- DataContractSerializerOperationBehavior.cs
- LogEntrySerializer.cs
- FilteredDataSetHelper.cs
- DrawingState.cs
- LicenseException.cs
- ContentIterators.cs
- RawTextInputReport.cs
- DbConnectionPoolOptions.cs
- LinkedDataMemberFieldEditor.cs
- ReadContentAsBinaryHelper.cs
- MethodExecutor.cs
- ExtensionQuery.cs
- TemplateField.cs
- PersonalizationStateInfo.cs
- StylusDevice.cs
- JsonDeserializer.cs
- HebrewCalendar.cs
- SlotInfo.cs
- DataGridViewToolTip.cs
- TraceProvider.cs
- CompositeActivityDesigner.cs
- DataGridAddNewRow.cs
- Fonts.cs
- DropShadowEffect.cs
- SystemInfo.cs
- StringUtil.cs
- CriticalExceptions.cs
- ResourcesGenerator.cs
- TileModeValidation.cs
- TemplateNameScope.cs
- ColorTranslator.cs
- VisualStyleTypesAndProperties.cs
- ExtendedPropertyDescriptor.cs
- ResourceExpression.cs
- NativeMethods.cs
- AsyncOperationManager.cs
- TextCollapsingProperties.cs
- TemplateDefinition.cs
- ReversePositionQuery.cs
- webbrowsersite.cs
- ApplicationServiceHelper.cs
- IPPacketInformation.cs
- PersonalizationAdministration.cs
- KnownTypesProvider.cs
- _IPv6Address.cs
- EmptyTextWriter.cs
- UnsupportedPolicyOptionsException.cs
- IncrementalReadDecoders.cs
- StringDictionary.cs
- MemberDomainMap.cs
- RenderContext.cs
- GlyphTypeface.cs
- DesignerListAdapter.cs
- Wizard.cs
- SettingsBindableAttribute.cs
- SoapBinding.cs
- ExpressionBuilderContext.cs
- TextProviderWrapper.cs
- SqlGatherProducedAliases.cs
- GenericUI.cs
- WindowsFormsSectionHandler.cs
- SystemEvents.cs
- SBCSCodePageEncoding.cs
- MD5HashHelper.cs
- ExpressionBuilderContext.cs
- TypeConverterAttribute.cs
- ConnectionManagementElementCollection.cs
- CodeStatement.cs
- BufferedReadStream.cs
- Predicate.cs
- XmlDocumentType.cs
- GenericsInstances.cs
- AlgoModule.cs
- QilLiteral.cs
- WithParamAction.cs
- CLSCompliantAttribute.cs
- SubqueryTrackingVisitor.cs
- EnumValidator.cs
- OrderedEnumerableRowCollection.cs
- DecodeHelper.cs
- TextBox.cs
- FigureHelper.cs
- MaskInputRejectedEventArgs.cs
- InstalledVoice.cs
- Pair.cs
- WebResourceUtil.cs
- CrossSiteScriptingValidation.cs
- LayoutSettings.cs
- BaseInfoTable.cs
- Variable.cs
- FindCriteriaElement.cs
- HttpTransportManager.cs
- SmiContext.cs
- EventSinkHelperWriter.cs
- FragmentQueryKB.cs
- XmlEnumAttribute.cs
- GlyphElement.cs
- Random.cs
- InheritanceAttribute.cs
- PropertyValueUIItem.cs