다음 코드는 관리자 계정에서는 정상적으로 작동하지만 관리자가 아닌 계정에서는 두 번 성공한 다음 System.Net.Sockets.SocketException (0x80004005)을 throw합니다. 액세스 권한으로 금지 된 방식으로 소켓에 액세스하려고했습니다. 누구나 이것이 왜인지에 대한 통찰력을 가지고 있습니까?관리자가 아닌 계정에 여러 개의 PGM 수신 소켓이있는 액세스 예외 얻기
참고 실제 사용 사례는 동일한 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
@Wug 여기에서는 동일한 주소를 사용하는 여러 응용 프로그램을 사용하고 있습니다. 우리는 세 번째 응용 프로그램에서이 예외가 발생한다는 것을 알았습니다. 사실 하나의 소켓을 바인딩하는이 프로그램의 3 가지 인스턴스를 실행하면 각각 동일한 동작을 기대할 수 있습니다. 이것은 Windows 7에서 실행 중입니다. – Wegged
관리자 이외의 사용자가 남용을 막을 수 있도록 의도적으로 부과 된 제한 사항 일 수 있습니다. – Wug