2012-07-31 51 views
2

以下代碼適用於管理員帳戶,但是對於非管理員帳戶,它會兩次打印成功,然後拋出System.Net.Sockets.SocketException(0x80004005):嘗試以訪問權限禁止的方式訪問套接字。任何人都有任何見解,爲什麼這是?使用非管理帳戶上的多個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 2012-07-31 19:32:15

+0

@Wug這裏發生的是我們有多個應用程序使用相同的地址。我們注意到第三個應用程序引發了這個異常。實際上,如果你運行這個程序的3個實例,每個綁定一個套接字,我都會期待相同的行爲。這是在Windows 7上運行。 – Wegged 2012-07-31 20:09:02

+1

這可能是一個有意限制非管理用戶爲防止濫用而施加的限制。 – Wug 2012-07-31 20:20:05

回答

3

好吧,我終於得到消息從微軟這次並沒有解決方法。

我能夠找到您的請求被拒絕的行。

[0] 22E8.1554 :: 8月15日/ 2012-10:05:19.015 [SYS] address_c491 PgmCreateAddress() - PgmCreateAddress:ERROR - 非管理員用戶試圖 打開2 + 1手柄IP:端口=

隨着一點點的代碼審查,我能證實只有三個 校長被授予訪問權限,他們是管理員, 本地服務和網絡服務。除了成爲 管理員的成員之外,沒有解決方法。

我知道這不是你想要聽到的答案,但至少現在你有一個確認的答案。

相關問題