Получение исключения доступа с несколькими сокетами прослушивания 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();
}
}
1 ответ
Ну, я наконец получил сообщение от Microsoft по этому вопросу, и нет никакого обходного пути.
Мне удалось найти строку, где ваш запрос был отклонен.
[0] 22E8.1554:: 08/15 / 2012-10: 05: 19.015 [sys] address_c491 PgmCreateAddress () - PgmCreateAddress: ERROR - Пользователь без прав администратора пытается открыть дескриптор 2+1 для IP:Port=
После небольшого обзора кода я смог убедиться, что доступ предоставляется только трем принципалам: это Администраторы, LocalService и NetworkService. Помимо членства в Администраторах, нет обходного пути.
Я знаю, что это был не тот ответ, который вы хотели услышать, но, по крайней мере, теперь у вас есть подтвержденный ответ.