以下代码适用于管理员帐户,但对于非管理员帐户,它会打印成功两次然后抛出System.Net.Sockets.SocketException(0x80004005):尝试以某种方式禁止其访问套接字访问权限。任何人都知道为什么会这样?
仅供参考,这里的实际用例是使用相同PGM地址和套接字的多个应用程序。推送(通过多播)实时更新。这不是由我们自己的图书馆引起的概念证明。
class Program {
static void Main(string[] args) {
IPAddress ipAddr = IPAddress.Parse("239.0.0.2");
IPEndPoint end = new IPEndPoint(ipAddr, 40002);
Socket[] _sockets = new[] {
new Socket(AddressFamily.InterNetwork, SocketType.Rdm, (ProtocolType)113 ),
new Socket(AddressFamily.InterNetwork, SocketType.Rdm, (ProtocolType)113 ),
new Socket(AddressFamily.InterNetwork, SocketType.Rdm, (ProtocolType)113 )
};
foreach (var socket in _sockets)
{
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
socket.Bind(end);
Console.WriteLine("Success");
}
Console.ReadLine();
}
}
答案 0 :(得分:3)
好吧,我终于得到了微软的消息,并没有解决方法。
我能够找到您的请求被拒绝的行。
[0] 22E8.1554 :: 08/15 / 2012-10:05:19.015 [sys] address_c491 PgmCreateAddress() - PgmCreateAddress:错误 - 非管理员用户尝试 为IP打开2 + 1句柄:Port =
通过一些代码审查,我能够验证只有三个 委托人被授予访问权限,他们是管理员, LocalService和NetworkService。除了成为。的成员 管理员,没有解决方法。
我知道这不是你想听到的答案,但至少现在你有一个确定的答案。