【问题标题】:Getting an Access Exception with Multiple PGM Listening Sockets on Non-Admin Account在非管理员帐户上使用多个 PGM 侦听套接字获取访问异常
【发布时间】:2015-03-16 19:38:46
【问题描述】:

以下代码适用于管理员帐户,但对于非管理员帐户,它会打印两次成功然后抛出 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();
    }

}

【问题讨论】:

  • 为什么需要多个套接字绑定到同一个端点?对我来说似乎是多余的。也许我不明白你的意图。为什么不能只使用一个插座?产品是否使用不同的端点?此外,由于这是一个权限问题,它与您运行的平台有关。 Windows Server 可能有什么?
  • @Wug 这里发生的是我们有多个应用程序使用相同的地址。我们注意到第三个应用程序引发了这个异常。事实上,如果你运行这个程序的 3 个实例,每个实例绑定一个套接字,我会期望相同的行为。这是在 Windows 7 上运行的。
  • 这可能是故意强加给非管理用户以防止滥用的限制。

标签: c# .net sockets multicast pgm-protocol


【解决方案1】:

好吧,我终于从 Microsoft 那里得到消息,但没有解决方法。

我能够找到您的请求被拒绝的行。

[0] 22E8.1554::08/15/2012-10:05:19.015 [sys] address_c491 PgmCreateAddress() - PgmCreateAddress: 错误 - 非管理员用户尝试 为IP打开2+1句柄:端口=

通过一些代码审查,我能够验证只有三个 委托人被授予访问权限,他们是管理员, 本地服务和网络服务。除了成为会员 管理员,没有解决方法。

我知道这不是你想听到的答案,但至少现在你有一个确定的答案。

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    相关资源
    最近更新 更多