Получение исключения доступа с несколькими сокетами прослушивания PGM для учетной записи без прав администратора

Следующий код отлично работает для учетной записи администратора, но для учетной записи без администратора он дважды печатает успех, а затем выдает исключение 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();
    }

}


person Wegged    schedule 31.07.2012    source источник
comment
Почему именно вам нужно более одного сокета, привязанного к одной и той же конечной точке? Мне кажется излишним. Возможно, я не понимаю ваших намерений. Почему нельзя использовать только одну розетку? Использует ли производственная версия разные конечные точки? Кроме того, поскольку это проблема с разрешениями, она связана с платформой, на которой вы работаете. Windows Server что-то может быть?   -  person Wug    schedule 31.07.2012
comment
@Wug, что здесь происходит, так это то, что у нас есть несколько приложений, использующих один и тот же адрес. Мы заметили, что третье приложение вызывает это исключение. На самом деле, если вы запустите 3 экземпляра этой программы, каждый из которых связывает один сокет, я ожидаю такого же поведения. Это выполняется на Windows 7.   -  person Wegged    schedule 01.08.2012
comment
Вероятно, это ограничение намеренно наложено на пользователей без прав администратора для предотвращения злоупотреблений.   -  person Wug    schedule 01.08.2012


Ответы (1)


Что ж, я наконец получил известие от Microsoft по этому поводу, и обходного пути нет.

Мне удалось найти строку, в которой ваш запрос был отклонен.

[0] 22E8.1554::08/15/2012-10:05:19.015 [sys] address_c491 PgmCreateAddress() — PgmCreateAddress: ERROR — Пользователь без прав администратора пытается открыть дескриптор 2+1 для IP:Port=

Проведя небольшой анализ кода, я смог убедиться, что доступ предоставлен только трем субъектам, а именно администраторам, LocalService и NetworkService. Помимо того, что вы являетесь членом администратора, обходного пути нет.

Я знаю, это был не тот ответ, который вы хотели услышать, но, по крайней мере, теперь у вас есть подтвержденный ответ.

person Wegged    schedule 16.08.2012