[英]Unix sockets in c#
我正在嘗試使用Mono的UnixEndPoint,但是在使用它之前就失敗了。 我在64位Windows 7系統上運行Xamarind + .net 4.5。
這是一些代碼,證明沒有一種組合有效:
foreach(SocketType st in Enum.GetValues(typeof(SocketType)))
foreach(ProtocolType pt in Enum.GetValues(typeof (ProtocolType)))
{
try{
socket = new Socket (AddressFamily.Unix, st, pt);
Console.WriteLine("{0} {1}", st, pt);
}
catch{
}
}
基本上,所有組合都會產生某種套接字錯誤。
在這里,顯然有人在使用它-mono,c#,套接字,性能 -這是否應該在Windows上都可以使用? 嘗試在WINDOWS上使用UNIX套接字可能只是很愚蠢?
我看不出有什么理由期望它可以在Windows上運行。
.NET的Socket
類將AddressFamily
值直接傳遞給本機WSASocket()
函數,以創建非托管套接字對象。 默認情況下,Windows僅支持AddressFamily.InterNetwork
和AddressFamily.InterNetworkV6
(分別對應於AF_INET
和AF_INET6
),除非您安裝了其他網絡提供程序(NetBIOS是在Windows安裝中通常可以找到的明顯替代方法)。
從文檔中:
當前支持的值為AF_INET或AF_INET6,這是IPv4和IPv6的Internet地址族格式。 如果安裝了地址族的Windows套接字服務提供程序,則支持地址族的其他選項(例如,AF_NETBIOS與NetBIOS一起使用)。
可以在Unix機器上運行AddressFamily.Unix
是有意義的,但是除非您在Windows機器上安裝了提供對該地址家族特定支持的提供程序,否則它實際上應該在該Windows機器上失敗。
注意:從2018年8月開始,Windows對AF_UNIX套接字提供了有限的支持,以允許針對Linux場景的特定Windows子系統 。 有一些重要的限制,其中包括:僅支持面向流的套接字; 並且不支持輔助數據(例如,用於傳遞文件信息或用戶憑據)。 給定的套接字可用於在Windows內,WSL實例內或Windows與WSL實例之間進行通信,但不適用於多個這種情況。
目前,桌面.NET版本似乎不再支持,而.NET Core僅支持有限 。 在.NET Core中完成對UnixDomainSocketEndPoint
支持后,我想它有可能回到桌面.NET版本。
有關更多詳細信息,請參閱: https : //devblogs.microsoft.com/commandline/af_unix-comes-to-windows/和https://devblogs.microsoft.com/commandline/windowswsl-interop-with-af_unix/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.