c#中的Unix套接字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中的Unix套接字相关的知识,希望对你有一定的参考价值。
我正在尝试使用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套接字?
我认为没有理由期望这可以在Windows上运行。
AddressFamily
值直接由.NET的Socket
类传递给本地WSASocket()
函数,以创建非托管套接字对象。默认情况下,Windows仅支持AddressFamily.InterNetwork
和AddressFamily.InterNetworkV6
(分别对应于AF_INET
和AF_INET6
),除非您安装了其他网络提供程序(NetBios将是Windows安装中常见的明显替代方案)。
从文档:
当前支持的值是AF_INET或AF_INET6,它们是IPv4和IPv6的Internet地址系列格式。如果安装了地址系列的Windows套接字服务提供程序,则支持地址系列的其他选项(例如,与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仍然没有支持。一旦UnixDomainSocketEndPoint
支持在.NET Core中完成,我想它可能会重新回到桌面.NET版本。
有关更多详细信息,请参阅:https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/和https://devblogs.microsoft.com/commandline/windowswsl-interop-with-af_unix/
以上是关于c#中的Unix套接字的主要内容,如果未能解决你的问题,请参考以下文章
C++ UNIX 帮助 - 简单的 TCP 服务器套接字连接
带有 libevent/libev 的 C 或 C++:监视 unix 套接字