Socket.ExclusiveAddressUse Eigenschaft

Definition

Ruft einen Boolean-Wert ab, der angibt, ob der Socket das Binden nur eines einzigen Prozesses an einen Anschluss zulässt, oder legt diesen fest.

public:
 property bool ExclusiveAddressUse { bool get(); void set(bool value); };
public bool ExclusiveAddressUse { get; set; }
member this.ExclusiveAddressUse : bool with get, set
Public Property ExclusiveAddressUse As Boolean

Eigenschaftswert

true, wenn der Socket das Binden nur eines einzigen Sockets an einen bestimmten Anschluss zulässt, andernfalls false. Der Standardwert gilt true für Windows Server 2003 und Windows XP Service Pack 2 sowie false für alle anderen Versionen.

Ausnahmen

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Für diesen Bind(EndPoint) wurde Socket aufgerufen.

Beispiele

Im folgenden Codebeispiel wird die Verwendung des ExclusiveAddressUse-Attributs veranschaulicht.

static void ConfigureTcpSocket(Socket^ tcpSocket)
{
     
    // Don't allow another socket to bind to this port.
    tcpSocket->ExclusiveAddressUse = true;
     
    // The socket will linger for 10 seconds after
    // Socket.Close is called.
    tcpSocket->LingerState = gcnew LingerOption(true, 10);
     
    // Disable the Nagle Algorithm for this tcp socket.
    tcpSocket->NoDelay = true;
     
    // Set the receive buffer size to 8k
    tcpSocket->ReceiveBufferSize = 8192;
     
    // Set the timeout for synchronous receive methods to
    // 1 second (1000 milliseconds.)
    tcpSocket->ReceiveTimeout = 1000;
     
    // Set the send buffer size to 8k.
    tcpSocket->SendBufferSize = 8192;
     
    // Set the timeout for synchronous send methods
    // to 1 second (1000 milliseconds.)
    tcpSocket->SendTimeout = 1000;
     
    // Set the Time To Live (TTL) to 42 router hops.
    tcpSocket->Ttl = 42;
    Console::WriteLine("Tcp Socket configured:");
    Console::WriteLine("  ExclusiveAddressUse {0}", 
        tcpSocket->ExclusiveAddressUse);
    Console::WriteLine("  LingerState {0}, {1}", 
        tcpSocket->LingerState->Enabled,
        tcpSocket->LingerState->LingerTime);
    Console::WriteLine("  NoDelay {0}",
        tcpSocket->NoDelay);
    Console::WriteLine("  ReceiveBufferSize {0}", 
        tcpSocket->ReceiveBufferSize);
    Console::WriteLine("  ReceiveTimeout {0}",
        tcpSocket->ReceiveTimeout);
    Console::WriteLine("  SendBufferSize {0}",
        tcpSocket->SendBufferSize);
    Console::WriteLine("  SendTimeout {0}",
        tcpSocket->SendTimeout);
    Console::WriteLine("  Ttl {0}",
        tcpSocket->Ttl);
    Console::WriteLine("  IsBound {0}",
        tcpSocket->IsBound);
    Console::WriteLine("");
}
static void ConfigureTcpSocket(Socket tcpSocket)
{
    // Don't allow another socket to bind to this port.
    tcpSocket.ExclusiveAddressUse = true;

    // The socket will linger for 10 seconds after
    // Socket.Close is called.
    tcpSocket.LingerState = new LingerOption (true, 10);

    // Disable the Nagle Algorithm for this tcp socket.
    tcpSocket.NoDelay = true;

    // Set the receive buffer size to 8k
    tcpSocket.ReceiveBufferSize = 8192;

    // Set the timeout for synchronous receive methods to
    // 1 second (1000 milliseconds.)
    tcpSocket.ReceiveTimeout = 1000;

    // Set the send buffer size to 8k.
    tcpSocket.SendBufferSize = 8192;

    // Set the timeout for synchronous send methods
    // to 1 second (1000 milliseconds.)
    tcpSocket.SendTimeout = 1000;

    // Set the Time To Live (TTL) to 42 router hops.
    tcpSocket.Ttl = 42;

    Console.WriteLine("Tcp Socket configured:");

    Console.WriteLine($"  ExclusiveAddressUse {tcpSocket.ExclusiveAddressUse}");

    Console.WriteLine($"  LingerState {tcpSocket.LingerState.Enabled}, {tcpSocket.LingerState.LingerTime}");

    Console.WriteLine($"  NoDelay {tcpSocket.NoDelay}");

    Console.WriteLine($"  ReceiveBufferSize {tcpSocket.ReceiveBufferSize}");

    Console.WriteLine($"  ReceiveTimeout {tcpSocket.ReceiveTimeout}");

    Console.WriteLine($"  SendBufferSize {tcpSocket.SendBufferSize}");

    Console.WriteLine($"  SendTimeout {tcpSocket.SendTimeout}");

    Console.WriteLine($"  Ttl {tcpSocket.Ttl}");

    Console.WriteLine($"  IsBound {tcpSocket.IsBound}");

    Console.WriteLine("");
}

Hinweise

Wenn ExclusiveAddressUse ist false, können mehrere Sockets die Bind -Methode verwenden, um an einen bestimmten Port zu binden. Allerdings kann nur einer der Sockets Vorgänge für den Netzwerkdatenverkehr ausführen, der an den Port gesendet wird. Wenn mehrere Sockets versuchen, die Bind(EndPoint) -Methode zum Binden an einen bestimmten Port zu verwenden, verarbeitet der Socket mit der spezifischeren IP-Adresse den Netzwerkdatenverkehr, der an diesen Port gesendet wird.

Wenn ExclusiveAddressUse dies der Fall ist, ist truedie erste Verwendung der Bind -Methode zum Versuch, eine Bindung an einen bestimmten Port unabhängig von der IP-Adresse zu versuchen, erfolgreich. Alle nachfolgenden Verwendungen der Bind Methode zum Binden an diesen Port schlagen fehl, bis der ursprüngliche gebundene Socket zerstört wird.

Diese Eigenschaft muss festgelegt werden, bevor Bind aufgerufen wird, andernfalls wird ein InvalidOperationException ausgelöst.

Gilt für: