原本以为很简单的事情,却变成了一场噩梦。
归结为现在,我需要在特定链接本地 IPv6 地址上的端口 8888 上创建一个 UDP 侦听器。
执行以下行时抛出异常:
_udpSoc = new UdpClient(MONITOR_INPUT_EVENT_SOCKET, AddressFamily.InterNetworkV6);
(其中 MONITOR_INPUT_EVENT_SOCKET 是值 8888 的 const int)
在尝试寻求支持后,我什至找到了一篇描述完全相同的行的 MSDN 文章。
抛出的 SocketException 是“请求的地址在其上下文中无效”,错误代码为 10049,堆栈跟踪为:
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at System.Net.Sockets.UdpClient..ctor(Int32 port, AddressFamily family)
at [my code...]
或者,如果我将问题行更改为:
_udpSoc = new UdpClient(_groupEp);
(其中 _groupEp 是设置为 IPAddress.Any 的 IPEndPoint,ScopeId 设置正确的接口和 MONITOR_INPUT_EVENT_SOCKET 的端口)
...并获得“请求的地址在其上下文中无效”的异常,具有与以前相同的错误代码和堆栈跟踪。
怎么了?