在非管理员帐户上使用多个PGM侦听套接字获取访问异常

时间:2012-07-31 19:26:40

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

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

}

1 个答案:

答案 0 :(得分:3)

好吧,我终于得到了微软的消息,并没有解决方法。

  

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

     

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

     

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

     

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