AF_UNIX等效于Windows

Squ*_*all 13 sockets windows winapi porting ipc

我想知道如何在Windows上使用类似Unix Domain Socket的东西.

行为是:进程将是一个"服务器"并从其他进程接收连接,它可以保留和使用来自不同进程的连接,就像TCP套接字一样.

IP套接字不是解决方案,因为它需要选择端口,来自其他应用程序的进程可能需要所选端口,并且可以在网络中看到开放端口.
我不知道命名管道是否可以接收和保留多个客户端,但我没有看到如何区分不同的客户端.并且它没有提供一种方法来等待来自多个连接的数据,例如select.

一个老问题说关于使用命名管道,但它没有解释如何使用命名管道来获得所需的行为.Windows中的AF_UNIX
我没有看到如何获取特定客户端的句柄.

小智 7

Windows最近(Windows 10 Insider内部版本17063)实现了对AF_UNIX的支持,因此您可以在以后的Windows内部版本中使用它。

但是,并非所有功能都已实现,因此以下功能不起作用。

  • AF_UNIX数据报(SOCK_DGRAM)或序列包(SOCK_SEQPACKET)套接字类型。
  • 辅助数据:Linux的unix套接字实现支持在套接字上传递辅助数据,例如传递文件描述符(SCM_RIGHTS)或凭据('SCM_CREDENTIALS`)。Windows unix套接字实现中不支持辅助数据。
  • 自动绑定功能(有关详细信息,请参见“ sockaddr_un”部分)。
  • socketpair:Winsock 2.0中不支持socketpair套接字API。

来源:https : //blogs.msdn.microsoft.com/commandline/2017/12/19/af_unix-comes-to-windows/


Squ*_*all 0

我已经找到答案了。

最大的区别是等待连接的句柄与与客户端进行通信的句柄相同。我必须为服务器创建一个新的命名管道来等待下一个客户端。

参考资料:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365799%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows /desktop/aa365588%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365603%28v=vs.85%29.aspx