C# 中的 Unix 套接字

2024-05-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{

        }
    }

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

在这里,显然有人用过它——单声道、C#、套接字、性能 https://stackoverflow.com/questions/1783660/mono-c-sockets-performance- 这应该在 Windows 上工作吗?我可能只是很愚蠢地尝试在 WINDOWS 上使用 UNIX 套接字?


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

The AddressFamily值直接由 .NET 传递Socket向母语阶层WSASocket() https://msdn.microsoft.com/en-us/library/windows/desktop/ms742212(v=vs.85).aspx函数创建非托管套接字对象。默认情况下,仅AddressFamily.InterNetwork and AddressFamily.InterNetworkV6(对应于AF_INET and AF_INET6分别)均受 Windows 支持,除非您安装了其他网络提供商(NetBIOS 是 Windows 安装中常见的明显替代方案)。

从文档中:

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

这是有道理的AddressFamily.Unix将在一个Unix机,但除非您在 Windows 计算机上安装了为该地址族提供特定支持的提供程序,否则它实际上应该在该 Windows 计算机上失败。


Note:截至 2018 年 8 月,Windows 为 AF_UNIX 套接字提供有限支持,以允许特定Linux 的 Windows 子系统 https://learn.microsoft.com/en-us/windows/wsl/install-win10场景。其中有一些重要的限制:仅支持面向流的套接字;且不支持辅助数据(例如用于传递文件信息或用户凭据)。给定的套接字可用于在 Windows 内、WSL 实例内或 Windows 与 WSL 实例之间进行通信,但不能用于其中的多个场景。

目前,桌面 .NET 版本似乎仍然不支持,并且.一旦UnixDomainSocketEndPoint支持已在 .NET Core 中最终确定,我认为有可能会回到桌面 .NET 版本。

欲了解更多详情,请参阅:https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/ https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/ and https://devblogs.microsoft.com/commandline/windowswsl-interop-with-af_unix/ https://devblogs.microsoft.com/commandline/windowswsl-interop-with-af_unix/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的 Unix 套接字 的相关文章

随机推荐