2011-06-24 88 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的瞬时连接)很有用。

相关问题