Socket.ExclusiveAddressUse Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает значение, указывающее, разрешает ли Socket только один процесс привязаться к порту.
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
Значение свойства
true Значение , если только Socket один сокет может привязаться к конкретному порту; в противном случае false. Значение по умолчанию используется true для Windows Server 2003 и Windows XP и более новых версий.
Исключения
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Bind(EndPoint) был вызван для этого Socket.
Примеры
В следующем примере кода показано использование ExclusiveAddressUse свойства.
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("");
}
Комментарии
В противном ExclusiveAddressUse случае несколько сокетов могут использовать Bind метод для привязки к конкретному порту, однако только один из сокетов может выполнять операции с сетевым трафиком, отправленным на falseпорт. Если несколько сокетов пытается использовать Bind(EndPoint) метод для привязки к конкретному порту, то он с более конкретным IP-адресом будет обрабатывать сетевой трафик, отправленный на этот порт.
Если ExclusiveAddressUse это trueтак, первое использование Bind метода для попытки привязаться к конкретному порту, независимо от IP-адреса, будет выполнено успешно. Все последующие использование Bind метода для попытки привязаться к данному порту завершится ошибкой до тех пор, пока исходный сокет привязки не будет уничтожен.
Это свойство должно быть задано перед Bind вызовом InvalidOperationException ; в противном случае будет создано значение.