3

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

}

4

1 回答 1

3

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

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

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

通过一些代码审查,我能够验证只有三个主体被授予访问权限,它们是管理员、LocalService 和 NetworkService。除了成为管理员的成员之外,没有其他解决方法。

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

于 2012-08-16T21:26:12.443 回答