我正在尝试编写一款使用C#语言的软件,与使用MSYS构建的另一款软件通过(MSYS模拟的)Unix域套接字进行通信。我了解到“套接字服务器”(我不确定正确术语是什么)会创建一个临时文件,其中包含以下内容:
!<socket >59108 282F93E1-9E2D051A-46B57EFC-64A1852F
59108对应一个TCP端口,"socket server"正在监听回环接口上的该端口。使用数据包捕获工具,我已经确定"socket client"连接到了这个端口,并且信息通过回环接口交换。
我在我的软件中复制了这种行为,"socket client"连接到我的监听端口,但没有传输信息。我相信还有另一步操作,最可能涉及"socket"文件中的GUID,但我无法确定是什么。我需要做什么才能触发客户端与服务器的通信?
似乎MSYS使用了Cygwin的机制,其中涉及命名事件,该事件(可能)由"server"创建并(显然)被"server"发出信号,但是我天真的尝试实现似乎没有起作用。
我找到了Conrad Scott写的电子邮件,其中描述了"握手"过程的各种缺陷,并提出了一种据称可以解决它们的补丁。在这封电子邮件中,Conrad描述了所使用的过程,他指出实际上有两个事件,一个由"server"管理,另一个由"client"管理。我使用API Monitor查找CreateEvent()的调用,虽然有几个,但我找不到一个看起来像"smoking gun"(关键证据)的。也没有有趣的CreateSemaphore()调用,因此看起来Conrad的补丁从未被应用过(或者至少在MSYS分支Cygwin之后应用了一些时间)。