2012-07-31 8 views
2

다음 코드는 관리자 계정에서는 정상적으로 작동하지만 관리자가 아닌 계정에서는 두 번 성공한 다음 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(); 
    } 

}

+0

정확하게 동일한 끝점에 바인딩 된 둘 이상의 소켓이 필요한 이유는 무엇입니까? 나 한테 과장된 것 같아. 아마도 나는 당신의 의도를 이해하지 못할 것입니다. 왜 당신은 단지 하나의 소켓을 사용할 수 없습니까? 제작사가 다른 종단점을 사용합니까? 또한 권한 문제이므로 실행중인 플랫폼과 관련이 있습니다. Windows Server에 뭔가 있을까요? – Wug

+0

@Wug 여기에서는 동일한 주소를 사용하는 여러 응용 프로그램을 사용하고 있습니다. 우리는 세 번째 응용 프로그램에서이 예외가 발생한다는 것을 알았습니다. 사실 하나의 소켓을 바인딩하는이 프로그램의 3 가지 인스턴스를 실행하면 각각 동일한 동작을 기대할 수 있습니다. 이것은 Windows 7에서 실행 중입니다. – Wegged

+1

관리자 이외의 사용자가 남용을 막을 수 있도록 의도적으로 부과 된 제한 사항 일 수 있습니다. – Wug

답변

3

이 잘 나는 마침내에 Microsoft에서 단어를 가지고와 해결 방법은 없습니다.

귀하의 요청이 거부 된 행을 찾을 수있었습니다.

[0] 22E8.1554 : 08/15/2012-10 : 05 : 19.015 [SYS]를 address_c491 PgmCreateAddress() - PgmCreateAddress : ERROR - 관리자가 아닌 사용자에 대해 2 + 1 핸들을 열 시도 IP : Port =

코드 검토를 통해 주체에 액세스 권한이 부여 된 사용자가 3 명 뿐이며 Administrators, LocalService 및 NetworkService임을 확인할 수있었습니다. 관리자가 아닌 의 구성원이되는 것 외에는 해결 방법이 없습니다.

나는 이것이 당신이 듣고 싶었던 대답이 아니라는 것을 알고 있습니다. 그러나 적어도 이제는 확실한 답을 얻었습니다.