Socket.ExclusiveAddressUse的实际用途是什么?

6
最近我在使用.NET中的套接字进行一些工作,我想知道Socket.ExclusiveAddressUse的实际用途。我已经阅读了MSDN文档,所以我知道基本思路(强制一个特定的IP地址/端口组合只允许一个套接字绑定到它),但是我对属性的实际用途有点困惑。
文档说明当ExclusiveAddressUse为false时:

如果多个套接字尝试使用Bind(EndPoint)方法绑定到特定端口,则具有更具体IP地址的套接字将处理发送到该端口的网络流量。

一个IPEndPoint (我能找到的唯一的具体子类)怎么会比另一个更具体呢? 如何以及为什么在应用中使用这种行为? 为什么这种行为在Windows XP之后的版本中成为默认行为而在之前不是呢?
1个回答

4
例如,如果您有以下内容:
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 += ...);
}

您将开始监听端口800上所有IPv6地址的所有传入连接。现在,如果您在同一端口上使用精确的IP创建另一个套接字,新套接字将优先并开始侦听该精确IP的800端口。这对于较小的场景非常有用(即对于使用安全通道读/写到精确IP的短暂连接)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接