C# 中的 Unix 套接字
Unix sockets in c#
我正在尝试使用 Mono 的 UnixEndPoint,但还没开始使用就失败了。我是 运行 Xamarind + .net 4.5 在 64 位 windows 7 系统上。
这里有一些代码证明没有一个组合有效:
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 套接字可能只是非常愚蠢
我看不出有任何理由期望它能在 Windows 上运行。
AddressFamily
值由 .NET 的 Socket
class 直接传递给本机 WSASocket()
函数以创建非托管套接字对象。默认情况下,Windows只支持AddressFamily.InterNetwork
和AddressFamily.InterNetworkV6
(分别对应AF_INET
和AF_INET6
,除非你安装了其他网络提供商(NetBIOS将是一个明显的替代方案,可能在 Windows 安装中常见。
来自文档:
The values currently supported are AF_INET or AF_INET6, which are the Internet address family formats for IPv4 and IPv6. Other options for address family (AF_NETBIOS for use with NetBIOS, for example) are supported if a Windows Sockets service provider for the address family is installed.
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。 一旦 UnixDomainSocketEndPoint
支持完成在 .NET Core 中,我想它有可能回到桌面 .NET 版本。
详情请见:
https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/
和
https://devblogs.microsoft.com/commandline/windowswsl-interop-with-af_unix/
我正在尝试使用 Mono 的 UnixEndPoint,但还没开始使用就失败了。我是 运行 Xamarind + .net 4.5 在 64 位 windows 7 系统上。
这里有一些代码证明没有一个组合有效:
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 套接字可能只是非常愚蠢我看不出有任何理由期望它能在 Windows 上运行。
AddressFamily
值由 .NET 的 Socket
class 直接传递给本机 WSASocket()
函数以创建非托管套接字对象。默认情况下,Windows只支持AddressFamily.InterNetwork
和AddressFamily.InterNetworkV6
(分别对应AF_INET
和AF_INET6
,除非你安装了其他网络提供商(NetBIOS将是一个明显的替代方案,可能在 Windows 安装中常见。
来自文档:
The values currently supported are AF_INET or AF_INET6, which are the Internet address family formats for IPv4 and IPv6. Other options for address family (AF_NETBIOS for use with NetBIOS, for example) are supported if a Windows Sockets service provider for the address family is installed.
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。 一旦 UnixDomainSocketEndPoint
支持完成在 .NET Core 中,我想它有可能回到桌面 .NET 版本。
详情请见: https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/ 和 https://devblogs.microsoft.com/commandline/windowswsl-interop-with-af_unix/