2011-06-24 90 views
4

最近我一直在使用.NET中的套接字,我想知道Socket.ExclusiveAddressUse的實際用途是什麼。我讀過MSDN documentation,所以我知道基本概念(強制特定的IP地址/端口組合只允許一個套接字綁定到它),但我對該屬性實際使用的內容有些困惑。Socket.ExclusiveAddressUse的實際用途是什麼?

的文件說,當ExclusiveAddressUse是假的:

如果不止一個套接字嘗試使用Bind(EndPoint)方法綁定到特定端口,那麼一個,更具體的IP地址將處理網絡流量發送到那個港口。

一個IPEndPoint(我能找到的唯一具體的子類EndPoint)究竟是什麼比另一個更具體?如何以及爲什麼要在應用程序中使用此行爲?爲什麼這種行爲會成爲Windows版本之後的默認版本,而不是之前?

回答

3

例如,如果您有:

var endPoint = new IPEndPoint(IPAddress.IPv6Any, 800); 
using (var socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp)) 
{ 
    socket.Bind(endPoint); 
    socket.Listen(int.MaxValue); 
    socket.AcceptAsync(new SocketAsyncEventArgs().Completed += ...); 
} 

你會開始監聽所有傳入連接所有的IPv6,如果你在同一端口上創建具有確切IP另一個套接字端口800地址現在,新的套接字將優先,並開始監聽端口800上的確切IP。這對於較小的一組場景(例如,使用安全通道讀取/寫入確切IP的瞬時連接)很有用。

相關問題