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
- CodeDirectoryCompiler.cs
- DataGridViewRowConverter.cs
- ContainerParaClient.cs
- AnnotationStore.cs
- StdValidatorsAndConverters.cs
- Unit.cs
- DesignerAdapterUtil.cs
- XmlRawWriterWrapper.cs
- ProcessThread.cs
- FlagsAttribute.cs
- BaseTemplateParser.cs
- System.Data_BID.cs
- MenuItem.cs
- XmlCountingReader.cs
- MimeAnyImporter.cs
- LogSwitch.cs
- DocumentXPathNavigator.cs
- GridViewSortEventArgs.cs
- httpstaticobjectscollection.cs
- MD5Cng.cs
- MergeFilterQuery.cs
- ObjectViewEntityCollectionData.cs
- ResourceIDHelper.cs
- UnwrappedTypesXmlSerializerManager.cs
- BitmapSourceSafeMILHandle.cs
- TransportOutputChannel.cs
- DependencyStoreSurrogate.cs
- WinEventWrap.cs
- SelectorAutomationPeer.cs
- EventWaitHandleSecurity.cs
- HtmlTableRowCollection.cs
- CaseCqlBlock.cs
- DataTrigger.cs
- WorkflowStateRollbackService.cs
- CompositeControlDesigner.cs
- XmlTextReaderImpl.cs
- XmlSerializationReader.cs
- ListBox.cs
- TypeConverters.cs
- indexingfiltermarshaler.cs
- WhitespaceRule.cs
- AnyReturnReader.cs
- ExpressionVisitor.cs
- WindowsFormsSectionHandler.cs
- ProviderBase.cs
- CodeRemoveEventStatement.cs
- BamlResourceContent.cs
- DiscriminatorMap.cs
- HttpRawResponse.cs
- TableNameAttribute.cs
- XmlReaderSettings.cs
- Listen.cs
- SystemIcons.cs
- SymLanguageType.cs
- FixedSOMTableCell.cs
- ScrollPattern.cs
- URIFormatException.cs
- TextViewBase.cs
- ScrollBarRenderer.cs
- XmlComment.cs
- WmlControlAdapter.cs
- RootNamespaceAttribute.cs
- SuppressIldasmAttribute.cs
- XsdBuilder.cs
- SymDocumentType.cs
- StrokeNodeData.cs
- DataTableReaderListener.cs
- XmlNodeReader.cs
- Group.cs
- HttpConfigurationContext.cs
- MeasureData.cs
- RenderTargetBitmap.cs
- X509CertificateChain.cs
- RectAnimation.cs
- StackOverflowException.cs
- PageSetupDialog.cs
- DoubleUtil.cs
- DataGridViewComboBoxEditingControl.cs
- TextTreeText.cs
- SQLSingle.cs
- ShapeTypeface.cs
- DbConnectionFactory.cs
- ToolBarButton.cs
- ConditionChanges.cs
- _ConnectStream.cs
- TextElementCollectionHelper.cs
- ListViewCommandEventArgs.cs
- SchemaNotation.cs
- WindowsMenu.cs
- OdbcStatementHandle.cs
- ScriptModule.cs
- TabPanel.cs
- WebPartConnectionsConnectVerb.cs
- Decorator.cs
- RecognitionResult.cs
- DirtyTextRange.cs
- TypeDependencyAttribute.cs
- PaginationProgressEventArgs.cs
- IBuiltInEvidence.cs
- AffineTransform3D.cs