Kon*_*ess 5 .net sockets binding
我最近在.NET中使用套接字,我想知道它的实际用途Socket.ExclusiveAddressUse是什么。我已经阅读了MSDN文档,所以我知道基本概念(强制特定的IP地址/端口组合仅允许一个套接字绑定到它),但是对于该属性的实际用途有点困惑。
文档说什么时候ExclusiveAddressUse为假:
如果有多个套接字尝试使用该
Bind(EndPoint)方法绑定到特定端口,则具有更特定IP地址的套接字将处理发送到该端口的网络流量。
一个IPEndPoint(EndPoint我能找到的唯一具体的子类)比另一个具体的精确度如何?您将如何以及为什么在应用程序中使用此行为?为什么Windows XP以后而不是Windows以前的默认行为是这种行为?
例如,如果您有:
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 += ...);
}
Run Code Online (Sandbox Code Playgroud)
您将开始侦听端口 800 上来自所有 IPv6 地址的所有传入连接。现在,如果您在同一端口上创建另一个具有确切 IP 的套接字,则新套接字将优先并开始侦听端口 800 上的该确切 IP。对于较小的场景集很有用(即,对于使用安全通道读取/写入精确 IP 的瞬时连接)。
| 归档时间: |
|
| 查看次数: |
1585 次 |
| 最近记录: |