c#中的Unix套接字

Rbj*_*bjz 3 c# unix sockets windows mono

我正在尝试使用 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{

        }
    }
Run Code Online (Sandbox Code Playgroud)

基本上,所有组合都会产生某种类型的套接字错误。

在这里,有人显然使用了它——单声道、c#、套接字、性能——这应该在 Windows 上工作吗?尝试在 WINDOWS 上使用 UNIX 套接字可能很愚蠢?

Pet*_*iho 5

我看不出有任何理由期望它在 Windows 上运行。

AddressFamily值由 .NET 的Socket类直接传递给本机WSASocket()函数以创建非托管套接字对象。默认情况下,Windows 仅支持AddressFamily.InterNetworkAddressFamily.InterNetworkV6(分别对应于AF_INETAF_INET6),除非您安装了其他网络提供程序(NetBIOS 是一个明显的替代方案,可能在 Windows 安装中很常见)。

从文档:

当前支持的值为 AF_INET 或 AF_INET6,它们是 IPv4 和 IPv6 的 Internet 地址族格式。如果安装了地址族的 Windows 套接字服务提供程序,则支持地址族的其他选项(例如,用于 NetBIOS 的 AF_NETBIOS)。

AddressFamily.UnixUnix机器上工作是有道理的,但除非您在 Windows 机器上安装了一个提供程序来为该地址系列提供特定支持,否则它实际上应该在该 Windows 机器上失败。


注意:截至 2018 年 8 月,Windows 对 AF_UNIX 套接字提供有限支持,以允许特定的Windows 子系统 Linux方案。有一些重要的限制,其中包括:仅支持面向流的套接字;并且不支持辅助数据(例如用于传递文件信息或用户凭据)。给定的套接字可用于在 Windows 内、WSL 实例内或 Windows 和 WSL 实例之间进行通信,但不适用于这些场景中的多个。

目前,桌面 .NET 版本似乎仍然不支持,而.NET Core 只支持有限一旦UnixDomainSocketEndPoint在 .NET Core 中完成支持,我想它可能会回到桌面 .NET 版本。

有关更多详细信息,请参阅:https : //devblogs.microsoft.com/commandline/af_unix-comes-to-windows/https://devblogs.microsoft.com/commandline/windowswsl-interop-with-af_unix/