簡體   English   中英

C#中的Unix套接字

[英]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.InterNetworkAddressFamily.InterNetworkV6 (分別對應於AF_INETAF_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM