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();
}
}
爲什麼你需要多個綁定到同一端點的套接字?似乎對我來說是多餘的。也許我不理解你的意圖。爲什麼你不能只使用一個套接字?生產者是否使用不同的端點?另外,由於這是一個權限問題,它與您正在運行的平臺有關。 Windows Server的東西可能? – Wug 2012-07-31 19:32:15
@Wug這裏發生的是我們有多個應用程序使用相同的地址。我們注意到第三個應用程序引發了這個異常。實際上,如果你運行這個程序的3個實例,每個綁定一個套接字,我都會期待相同的行爲。這是在Windows 7上運行。 – Wegged 2012-07-31 20:09:02
這可能是一個有意限制非管理用戶爲防止濫用而施加的限制。 – Wug 2012-07-31 20:20:05