Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ //// 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
- ProcessingInstructionAction.cs
- PrincipalPermissionMode.cs
- ListGeneralPage.cs
- CodeExpressionRuleDeclaration.cs
- basecomparevalidator.cs
- DataServiceRequestOfT.cs
- XmlElementAttribute.cs
- ZoneMembershipCondition.cs
- FileUtil.cs
- PersonalizationStateInfoCollection.cs
- AssemblyAssociatedContentFileAttribute.cs
- BindStream.cs
- Zone.cs
- HttpResponseInternalWrapper.cs
- TemplateBuilder.cs
- AssemblyResourceLoader.cs
- RestClientProxyHandler.cs
- DataGridHeaderBorder.cs
- TreeView.cs
- BatchWriter.cs
- EllipseGeometry.cs
- XmlSchemaAnnotation.cs
- ErrorWebPart.cs
- PropertyDescriptorCollection.cs
- Int32Animation.cs
- Sql8ExpressionRewriter.cs
- ParallelDesigner.cs
- DocumentViewerBaseAutomationPeer.cs
- DynamicValidator.cs
- KeyValuePair.cs
- ClientProtocol.cs
- WorkflowDebuggerSteppingAttribute.cs
- AbstractExpressions.cs
- XmlException.cs
- Span.cs
- InternalControlCollection.cs
- SchemaImporterExtensionsSection.cs
- DataGridItemAutomationPeer.cs
- XhtmlConformanceSection.cs
- ObjectListField.cs
- ReadOnlyDataSource.cs
- OciLobLocator.cs
- XmlDataDocument.cs
- StrongNameMembershipCondition.cs
- DefaultPrintController.cs
- UshortList2.cs
- CurrentChangingEventArgs.cs
- FontStretch.cs
- SocketAddress.cs
- EventMappingSettings.cs
- LinkLabel.cs
- AxHost.cs
- Binding.cs
- Material.cs
- CompilerParameters.cs
- WorkerRequest.cs
- ReplyChannelBinder.cs
- TdsParserStaticMethods.cs
- IsolatedStorageFile.cs
- ActivityBindForm.cs
- WebPartChrome.cs
- DBDataPermission.cs
- ClientTargetCollection.cs
- IxmlLineInfo.cs
- ImageConverter.cs
- EventMappingSettings.cs
- XmlSchemaDocumentation.cs
- Point3DConverter.cs
- FastEncoderWindow.cs
- WebHttpSecurityElement.cs
- WebPartConnectionCollection.cs
- DiagnosticsConfiguration.cs
- SqlWorkflowPersistenceService.cs
- TimeStampChecker.cs
- AvTraceDetails.cs
- Single.cs
- SQLBinaryStorage.cs
- WebBrowserUriTypeConverter.cs
- GridViewDeleteEventArgs.cs
- BlockCollection.cs
- SessionStateItemCollection.cs
- TargetParameterCountException.cs
- CryptoProvider.cs
- TextTreeText.cs
- IdnElement.cs
- ConfigurationLocationCollection.cs
- TextPattern.cs
- _NTAuthentication.cs
- XmlSchemaSimpleContentRestriction.cs
- RSAPKCS1SignatureDeformatter.cs
- CheckBoxFlatAdapter.cs
- X509ThumbprintKeyIdentifierClause.cs
- ResXDataNode.cs
- MarkerProperties.cs
- Calendar.cs
- ValueTable.cs
- IPEndPointCollection.cs
- OleDbConnection.cs
- SymmetricKeyWrap.cs
- OperationCanceledException.cs