【问题标题】:Unix sockets in c#c#中的Unix套接字
【发布时间】:2015-05-07 13:19:24
【问题描述】:

我正在尝试使用 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#, sockets, performance - 这应该在 Windows 上工作吗?尝试在 WINDOWS 上使用 UNIX 套接字可能很愚蠢?

【问题讨论】:

    标签: c# windows sockets unix mono


    【解决方案1】:

    我认为没有任何理由期望它可以在 Windows 上运行。

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

    来自文档:

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

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


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

    目前看来,桌面 .NET 版本仍然不提供支持,only limited support in .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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      • 2019-11-24
      • 2012-05-15
      相关资源
      最近更新 更多