Socket.ExclusiveAddressUse Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá nebo nastaví hodnotu, která označuje, zda Socket umožňuje pouze jeden proces vytvořit vazbu na port.
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
Hodnota vlastnosti
true
Socket pokud umožňuje vytvořit vazbu pouze jednoho soketu na určitý port, jinak . false Výchozí hodnota je true pro systémy Windows Server 2003 a Windows XP a novější verze.
Výjimky
Při pokusu o přístup k soketu došlo k chybě.
Ta Socket byla uzavřena.
Bind(EndPoint) byla volána pro toto Socket.
Příklady
Následující příklad kódu ukazuje použití ExclusiveAddressUse vlastnosti.
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("");
}
Poznámky
Pokud ExclusiveAddressUse ano false, více soketů může použít metodu Bind k vytvoření vazby na konkrétní port, ale pouze jeden z soketů může provádět operace se síťovým provozem odesílaných na port. Pokud se více než jeden soket pokusí použít metodu Bind(EndPoint) pro vytvoření vazby na konkrétní port, pak ten s konkrétnější IP adresou zpracuje síťový provoz odeslaný na tento port.
Pokud ExclusiveAddressUse je true, první použití Bind metody pokusu o vytvoření vazby na určitý port, bez ohledu na IP adresu (Internet Protocol), bude úspěšné; všechny následné použití Bind metody k pokusu o vytvoření vazby na tento port selžou, dokud nebude zničen původní vázaný soket.
Tato vlastnost musí být nastavena před Bind zavolání; jinak InvalidOperationException bude vyvolána.